package suncity.booking.widget;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.Button;
/**
* 让 drawbleLeft or drawableRight 与文本一起居中
*/
public class DrawableCenterButton extends Button {
public DrawableCenterButton(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
public DrawableCenterButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DrawableCenterButton(Context context) {
super(context);
}
@Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
Drawable[] drawables = getCompoundDrawables();
Drawable drawableTop = drawables[1];
if (drawableTop != null) {
// 获取字体高度
Paint.FontMetrics fontMetrics = getPaint().getFontMetrics();
double textHeight = Math.ceil(fontMetrics.descent - fontMetrics.ascent);
int drawablePadding = getCompoundDrawablePadding();
int drawableHeight = 0;
drawableHeight = drawableTop.getIntrinsicHeight();
float bodyWidth = (float) (textHeight + drawableHeight + drawablePadding);
setPadding(0, (int) (getHeight() - bodyWidth) / 2, 0, (int) (getHeight() - bodyWidth) / 2);
}
}
@Override
protected void onDraw(Canvas canvas) {
Drawable[] drawables = getCompoundDrawables();
if (drawables != null) {
Drawable drawableLeft = drawables[0];
Drawable drawableRight = drawables[2];
if (drawableLeft != null) {
float textWidth = getPaint().measureText(getText().toString());
int drawablePadding = getCompoundDrawablePadding();
int drawableWidth = 0;
drawableWidth = drawableLeft.getIntrinsicWidth();
float bodyWidth = textWidth + drawableWidth + drawablePadding;
setPadding((int) (getWidth() - bodyWidth)/2, 0, (int) (getWidth() - bodyWidth)/2, 0);
} else if (drawableRight != null) {
float textWidth = getPaint().measureText(getText().toString());
int drawablePadding = getCompoundDrawablePadding();
int drawableWidth = 0;
drawableWidth = drawableRight.getIntrinsicWidth();
float bodyWidth = textWidth + drawableWidth + drawablePadding;
setPadding(0, 0, (int) (getWidth() - bodyWidth), 0);
canvas.translate((getWidth() - bodyWidth) / 2, 0);
}
}
super.onDraw(canvas);
}
}
[Android] 零碎知识汇总 - DrawableCenterButton
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 前言 开始意识到,知识"缝合"的重要性,只要没有开始学会表述,看书再多,终究会忘记。 ok,这一篇,用来记录Vie...
- 以上作为笔记用来记录要说一下几个东西 12互斥 1>234互斥 3>413是具体的值,24是比例 这个我不是很懂,...