【问题标题】:How to set scaleType and adjustViewBounds in Custom ImageView如何在自定义 ImageView 中设置 scaleType 和 adjustViewBounds
【发布时间】:2014-12-02 07:29:29
【问题描述】:

我创建了一个自定义 ImageView 类,因为我想为我的 Canvas 覆盖 onDraw 方法;但是,我的自定义 ImageView 类没有继承 XML 属性 scaleType="centerInside"adjustViewBounds="true"。如果我切换到默认的 ImageView,一切正常 - 但我怎样才能让它在我的自定义 Image View 中工作?

在下面的类中,我只是从我的应用程序类中检索位图并将其绘制到画布上;但是,当使用我的 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"
  • 用Matrix参数调用canvas.drawBitmap,从grtImageMatrix()中获取
  • @Evan B:进展如何?

标签: android android-layout android-canvas android-imageview


【解决方案1】:
public CustomImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
    wApp = ProjectApp.createInstance();
    paint = new Paint();
    setAdjustViewBounds(true);
    setScaleType(ImageView.ScaleType.CENTER_INSIDE);
}

【讨论】:

  • 嗨,这可能很好地解决了问题......但如果你能编辑你的答案并提供一些关于它的工作原理和原因的解释会很好:)不要忘记 - 那里在 Stack Overflow 上是一堆新手,他们可以从你的专业知识中学到一两件事——对你来说显而易见的事情对他们来说可能不是。
  • 你是对的。我认为这很简单,但可能不是每个人都这样。
  • 嘿@Carnal,感谢您的回复。在发布这个问题之前,我实际上已经尝试过 - 忘记添加我的尝试。我还在 onDraw 覆盖本身中添加了这一点,但无济于事。
  • 好吧,为什么构造函数有WindowImageView?它甚至可以编译吗?
  • @Carnal 抱歉,出于隐私目的,我将名称更改为 CustomImageView - 忘记更改了。是的,它确实可以编译。
【解决方案2】:

我认为您想改用 fitXY,因此图像将受到 CustomImageView 布局参数(在本例中是其父级)的约束。

android:scaleType="fitXY"

【讨论】:

    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多