【发布时间】:2018-05-30 13:22:00
【问题描述】:
我正在制作一个从 ImageView 派生的自定义 View,并且我使用填充控制图像必须在该 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 像我想要的那样更改,但我显示的图像位置或大小都不正确。
有趣的是,如果我在resize_image() 的末尾添加额外的invalidate(); 行并单击custom_ImageView 两次 - 在第二次单击时,图像会以正确的大小和位置绘制自身如我所愿。
谁能告诉我为什么会这样?
【问题讨论】:
标签: android android-layout android-imageview padding