如何在自定义ImageView中设置scaleType和adjustViewBounds

4
我创建了一个自定义ImageView类,因为我想要覆盖Canvas的onDraw方法; 然而,在我的自定义ImageView类中没有继承XML属性scaleType="centerInside"和adjustViewBounds="true"。如果我切换到默认的ImageView,一切都可以正常工作 - 但是如何让它在我的自定义ImageView中工作呢?
在下面的代码中,我只是从我的应用程序类中检索位图并将其绘制到画布上; 但是,当使用我的CustomImageView时,图像非常大,并且没有正确缩放。有什么办法可以解决这个问题吗?谢谢!
自定义ImageView XML:
<com.project.app.controls.CustomImageView
    android:id="@+id/myImage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:scaleType="centerInside"/>

自定义ImageView类:

public class CustomImageView extends ImageView {
    ProjectApp wApp;
    Paint paint;

    public CustomImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        wApp = ProjectApp.createInstance();
        paint = new Paint();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
        canvas.drawBitmap(wApp.photoTaken, 0, 0, null);
    }
}

尝试使用 android:scaleType="fitXY" - petey
使用Matrix参数调用canvas.drawBitmap,从grtImageMatrix()获取它。 - pskink
@Evan B:进展如何? - Carnal
2个回答

2
public CustomImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
    wApp = ProjectApp.createInstance();
    paint = new Paint();
    setAdjustViewBounds(true);
    setScaleType(ImageView.ScaleType.CENTER_INSIDE);
}

1
嗨,这可能会解决问题...但如果您能编辑您的答案并提供一些关于它如何以及为什么起作用的解释,那就太好了 :) 别忘了 - 在 Stack Overflow 上有很多新手,他们可以从您的专业知识中学到一两件事情 - 对您来说显而易见的可能对他们来说并非如此。 - Taryn East
你是对的。我认为这很简单,但对于每个人来说可能并非如此。 - Carnal
嘿 @Carnal,谢谢回复。实际上在发表这个问题之前我已经尝试过了 - 忘记添加我的尝试了。我也在onDraw重写本身中添加了它,但是没有用。 - Evan Bashir
好的,为什么你在构造函数中使用WindowImageView?它能编译吗? - Carnal
好的,我需要使用onDraw()来刷新我的画布。 - Evan Bashir
显示剩余2条评论

1
我认为您想使用fitXY,这样图片将受到CustomImageView布局参数(以及其父级在此情况下)的约束限制。 android:scaleType="fitXY"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接