android顶部居中,如何将drawableLeft对齐到顶部,而不是在android TextView中居中?

本文介绍了如何通过自定义Drawable并重写onDraw方法,实现复合Drawable的底部对齐,以及如何与TextView的边界对齐,包括设置边界和像素完美布局。示例代码展示了如何创建一个GravityCompoundDrawable来调整子Drawable的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

my answer here。

您可以通过创建包装您的Drawable的自定义Drawable,然后通过覆盖方法onDraw(Canvas)来操作您的自定义Drawable的绘图来将一个复合Drawable(或底部)对齐。

以下示例是最简单的示例。这将图像与顶部对齐,但您也可以通过在onDraw(Canvas)方法中实现所需的逻辑使其与TextView的底部,左侧或右侧对齐。您可能还需要在onDraw(Canvas)中构建边距,使您的设计实现像素完美。

样品用量:

GravityCompoundDrawable gravityDrawable = new GravityCompoundDrawable(innerDrawable);

// NOTE: next 2 lines are important!

innerDrawable.setBounds(0, 0, innerDrawable.getIntrinsicWidth(), innerDrawable.getIntrinsicHeight());

gravityDrawable.setBounds(0, 0, innerDrawable.getIntrinsicWidth(), innerDrawable.getIntrinsicHeight());

mTextView.setCompoundDrawables(gravityDrawable, null, null, null);

示例代码:

public class GravityCompoundDrawable extends Drawable {

// inner Drawable

private final Drawable mDrawable;

public GravityCompoundDrawable(Drawable drawable) {

mDrawable = drawable;

}

@Override

public int getIntrinsicWidth() {

return mDrawable.getIntrinsicWidth();

}

@Override

public int getIntrinsicHeight() {

return mDrawable.getIntrinsicHeight();

}

@Override

public void draw(Canvas canvas) {

int halfCanvas= canvas.getHeight() / 2;

int halfDrawable = mDrawable.getIntrinsicHeight() / 2;

// align to top

canvas.save();

canvas.translate(0, -halfCanvas + halfDrawable);

mDrawable.draw(canvas);

canvas.restore();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值