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


    效果图

  • 相关阅读:
    捕获异常的两种方式Exception
    线程的随机性
    单例模式简单解析--Singleton 单例模式(懒汉方式和饿汉方式)
    LeetCode 116. 填充每个节点的下一个右侧节点指针
    LeetCode 129. 求根到叶子节点数字之和
    LeetCode 124. 二叉树中的最大路径和
    LeetCode 119. 杨辉三角 II
    LeetCode 118. 杨辉三角
    LeetCode 113. 路径总和 II
    LeetCode 114. 二叉树展开为链表
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5220265.html
Copyright © 2011-2022 走看看