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

问题描述 投票:0回答:1

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

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

有趣的是,如果我在invalidate();的末尾添加额外的resize_image()线,并且我点击我的custom_ImageView两次 - 在第二次点击图像上绘制自己正确的大小和位置,就像我想要的那样。

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

android android-layout android-imageview padding
1个回答
0
投票

我有点解决这个问题,完全没有使用ImageView,只是通过使用Canvas.drawBitmap(Bitmap, RectF, RectF, Paint)绘制图像所需的位置

这样我就不必在setPadding中使用onDraw指定图像位置,但我可以通过使用RectF指定位置来实现。

© www.soinside.com 2019 - 2024. All rights reserved.