我正在制作一个来自View
and的自定义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)
成员函数内我设置了新的填充
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
两次 - 在第二次点击图像上绘制自己正确的大小和位置,就像我想要的那样。
谁能告诉我为什么会这样?
我有点解决这个问题,完全没有使用ImageView,只是通过使用Canvas.drawBitmap(Bitmap, RectF, RectF, Paint)
绘制图像所需的位置
这样我就不必在setPadding
中使用onDraw
指定图像位置,但我可以通过使用RectF
指定位置来实现。