您的位置:首页 > 移动开发 > Android开发

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

2016-02-26 14:13 531 查看
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" />


效果图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: