Android 自定義 TextView drawableTop 圖標與文字左對齊(效果圖)
來源:程序員人生 發布時間:2014-11-03 08:04:35 閱讀次數:4090次
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" />
效果圖
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈