在setLayoutParams之后,ImageView上的setPadding不起作用

时间:2017-12-16 16:00:42

标签: android android-layout android-imageview padding

我正在制作一个来自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);
        //...
    }
//...
}

结果是widthheigth改变了我想要的但是我显示的图像既不是正确的位置或大小。

有趣的是,如果我在invalidate();的末尾添加额外的resize_image()行,并点击我的custom_ImageView两次 - 在第二次点击图片上绘制本身的大小和位置都是我想要的。

谁能告诉我为什么会这样?

1 个答案:

答案 0 :(得分:0)

我有点解决这个问题,完全没有使用ImageView,只是使用Canvas.drawBitmap(Bitmap, RectF, RectF, Paint)

绘制图像所需的位置

这样我就不必在setPadding内使用onDraw指定图片位置,但我只需使用RectF指定位置即可。