我创建了一个扩展ProgressBar的CustomBar,它有各种方法来自定义外观。其中一个函数为进度部分添加了一个图标。因为ProgressBar会被裁剪得更大,这是我不想要的。 所以我尝试在添加Icon时更改ProgressBar的大小。
像这样:ViewGroup.LayoutParams params = getLayoutParams();
params.height = bitmap.getHeight();
setLayoutParams(params);
requestLayout();
这并没有解决问题,所以我尝试改变Drawable的大小。 这是一个LayerDrawable,我试过,setBounds,setLayerInsets,用填充将第一个Layer更改为InsetDrawable以获得我想要的大小。一切都没有用。
那我错过了什么?如何在运行时正确更改progressBar的大小?
答案 0 :(得分:1)
我自己找到答案,你必须覆盖边界,但也要覆盖画布。
@Override
protected synchronized void onDraw(Canvas canvas)
{
if(bitmap != null && bitmap.getHeight() > getHeight())
{
canvas.clipRect(0, 0, getWidth(), bitmap.getHeight(), Region.Op.REPLACE);
bounds = getProgressDrawable().getBounds();
bounds.bottom = bitmap.getHeight();
}
doSomething();
}
重要的是Region.Op.REPLACE标志,通常裁剪只是与画布的边界相交。