• 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" />


    效果图

  • 相关阅读:
    实验0 了解和熟悉操作系统
    学习进度条
    0302软件构建与教学
    评论任务
    学习进度条
    sprint3个人总结
    软件工程学期总结
    6.3 学术诚信与职业道德
    阅读《构建之法》第8、9、10章
    nodejs学习心得
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5220265.html
Copyright © 2020-2023  润新知