zoukankan      html  css  js  c++  java
  • Android 自己定义 TextView drawableTop 图标与文字左对齐(效果图)

    public class DrawableTopLeftTextView extends TextView {
    
    	private Paint mPaint;
    	private float fFontHeight;
    	private Drawable[] drawables;
    	private int leftMargin = 40; //TODO 这个要通过代码获取,不能硬编码
    
    	public DrawableTopLeftTextView(Context context, AttributeSet attrs, int defStyle) {
    		super(context, attrs, defStyle);
    		init();
    	}
    
    	public DrawableTopLeftTextView(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		init();
    	}
    
    	public DrawableTopLeftTextView(Context context) {
    		super(context);
    		init();
    	}
    
    	private void init() {
    		mPaint = getPaint();
    		//mPaint.setTextSize(56.0f);
    		mPaint.setColor(Color.parseColor("#cccccccc"));
    		FontMetrics fm = mPaint.getFontMetrics();
    		fFontHeight = (float) Math.ceil(fm.descent - fm.ascent);
    		drawables = getCompoundDrawables();
    	}
    
    	@Override
    	protected void onDraw(Canvas canvas) {
    		if (drawables != null) {
    			Drawable drawable = drawables[1]; // top
    			if (drawable != null) {
    				final float textY = getY() + drawable.getIntrinsicHeight() + fFontHeight - 5;
    				canvas.drawText(getText().toString(), 0, textY, mPaint);
    				canvas.clipRect(drawable.getBounds());
    				canvas.drawBitmap(getBitmap(drawable), getLeft()+leftMargin, getTop(), mPaint);
    				drawable.draw(canvas);
    				canvas.save();
    			}
    		}
    		super.onDraw(canvas);
    	}
    	
    	private final static Bitmap getBitmap(Drawable drawable){
    		BitmapDrawable bd = (BitmapDrawable) drawable;
    		return bd.getBitmap();
    	}
    }


    <com.bluetooth.light.widget.DrawableTopLeftTextView
                android:id="@+id/signal_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_marginRight="10dp"
                android:drawableTop="@drawable/signal_logo"
                android:text="@string/signal"
                android:textColor="#cccccccc"
                android:textSize="24sp" />


    效果图

  • 相关阅读:
    TC Asia Competition
    Codeforces 258 Div2
    斯坦纳树
    <算法竞赛入门经典> 第8章 贪心+递归+分治总结
    UVALive 6602 Counting Lattice Squares
    UVALive 6609 Minimal Subarray Length (查找+构建排序数组)
    vue中路由以及动态路由跳转
    sublime安装
    js数组转对象
    如何将变量做为一个对象的key,push进一个数组?
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5220265.html
Copyright © 2011-2022 走看看