【问题标题】:setPadding on ImageView doesnt work after setLayoutParams在 setLayoutParams 之后,ImageView 上的 setPadding 不起作用
【发布时间】: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);
        //...
    }
//...
}

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

有趣的是,如果我在resize_image() 的末尾添加额外的invalidate(); 行并单击custom_ImageView 两次 - 在第二次单击时,图像会以正确的大小和位置绘制自身如我所愿。

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

【问题讨论】:

    标签: android android-layout android-imageview padding


    【解决方案1】:

    我通过完全不使用 ImageView 而只是通过使用 Canvas.drawBitmap(Bitmap, RectF, RectF, Paint) 在需要的位置绘制图像来解决这个问题

    这样我不必在onDraw 中使用setPadding 指定图像位置,但我可以通过使用RectF 指定位置来简单地做到这一点。

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 2020-08-22
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 2011-05-28
      相关资源
      最近更新 更多