程序员人生 网站导航

Android 自定义 TextView drawableTop 图标与文字左对齐(效果图)

栏目:互联网时间:2014-11-03 08:04:35
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" />


效果图

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐