Android force可绘制相同高度和宽度的图形
我使用日历库,我需要提供自定义选择器绘制。不幸的是,我应该使每个日期单元格的高度小于宽度,这就是为什么我在xml中将Android force可绘制相同高度和宽度的图形,android,android-drawable,Android,Android Drawable,我使用日历库,我需要提供自定义选择器绘制。不幸的是,我应该使每个日期单元格的高度小于宽度,这就是为什么我在xml中将app:mcv_tileHeight设置为40dp 在我提供选择器drawable后,它会被拉伸到整个单元格的边界。 但我希望它像正方形一样缩放,而不是像矩形一样缩放,也就是说,若视图的宽度(在我的例子中是日期)大于高度,我希望在左右两侧都有空的空间 下面是我目前拥有的以及我想要实现的实际屏幕截图 我已经尝试通过在层列表的属性中将宽度和高度设置为相同的值,在xml中强制使用方形比
app:mcv_tileHeight
设置为40dp
在我提供选择器drawable后,它会被拉伸到整个单元格的边界。
但我希望它像正方形一样缩放,而不是像矩形一样缩放,也就是说,若视图的宽度(在我的例子中是日期)大于高度,我希望在左右两侧都有空的空间
下面是我目前拥有的以及我想要实现的实际屏幕截图
我已经尝试通过在层列表的
属性中将宽度和高度设置为相同的值,在xml中强制使用方形比例,但这对我没有帮助
我还尝试了第二个答案,但它产生了崩溃
我试图像这样扩展Drawable类,但我用这种方法得到了NPE
public class SquareDrawable extends Drawable {
private Drawable drawable;
public SquareDrawable(Drawable drawable) {
this.drawable = drawable;
}
@Override
public void setBounds(int left, int top, int right, int bottom) {
super.setBounds(left, top, right, bottom);
calculateBounds(right - left, bottom - top);
}
private void calculateBounds(int width, int height) {
final int radius = Math.min(height, width);
final int offset = Math.abs(height - width) / 2;
if (width >= height) {
drawable.setBounds(offset, 0, radius + offset, height);
} else {
drawable.setBounds(0, offset, width, radius + offset);
}
}
@Override
public void draw(@NonNull Canvas canvas) {
drawable.draw(canvas);
}
@Override
public void setAlpha(int alpha) {
drawable.setAlpha(alpha);
}
@Override
public void setColorFilter(@Nullable ColorFilter colorFilter) {
drawable.setColorFilter(colorFilter);
}
@Override
public int getOpacity() {
return drawable.getOpacity();
}
}
如果可绘制为位图可绘制,则应能够设置其重力以强制图像居中
BitmapDrawable bitmap = (BitmapDrawable) getResources().getDrawable(R.color.chat_cardview_color);
bitmap.setGravity(Gravity.center)
这里有一个类似的问题。不,它不是位图。现在我用椭圆形状和填充的图层列表,我试着用位图,但它不起作用。老实说,这似乎是库问题,圆的动态绘制很好,谢谢你的帮助+1