我正在制作一个来自View
的自定义ImageView
,并且我使用填充控制图像必须位于此ImageView
内。
我在自定义ImageView上设置了OnClickListener并调整了它的大小:
image.setOnClickListener(new ImageView.OnClickListener(){
@Override
public void onClick(View v) {
image.resize_image();
}
});
这就是这个功能的样子
public void resize_image(){
ViewGroup.LayoutParams params = getLayoutParams();
params.height = new_heigth;
params.width = new_width;
setLayoutParams(params);
}
完成此调整大小后,我不希望我的显示图像更改大小(只有自定义ImageView正在改变大小,以便我可以在此图像周围绘制额外的东西)在我的自定义ImageView中,因此在onDraw(Canvas)
成员内function我设置了新的填充
class custom_ImageView extends ImageView{
//...
@Override
protected void onDraw(Canvas canvas) {
//...
setPadding(new_left_padding, new_top_padding, new_right_padding, new_bottom_padding);
//...
}
//...
}
结果是width
和heigth
改变了我想要的但是我显示的图像既不是正确的位置或大小。
有趣的是,如果我在invalidate();
的末尾添加额外的resize_image()
行,并点击我的custom_ImageView
两次 - 在第二次点击图片上绘制本身的大小和位置都是我想要的。
谁能告诉我为什么会这样?
答案 0 :(得分:0)
我有点解决这个问题,完全没有使用ImageView,只是使用Canvas.drawBitmap(Bitmap, RectF, RectF, Paint)
这样我就不必在setPadding
内使用onDraw
指定图片位置,但我只需使用RectF
指定位置即可。