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是比例 这个我不是很懂,...
- 每天因为一点点小小的进步暗自狂喜,不知道大洋彼岸那头的同龄人,已经成为了国家级运动员且获奖无数。自己造船跨河跨湖,...