1

我正在尝试创建一个适用于图像(移动、缩放、旋转)的 android 应用程序(最小 SDK 14,目标 SDK 18)。我已经完成了移动部分。但我无法使用 Matrix 进行缩放和旋转工作。

根据我所阅读的内容,这是我用于构建图像视图并使用 Matrix 进行缩放和旋转的代码。

public MyImage(Context context) {
    super(context);
    init();
}

public MyImage(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public MyImage(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
}

private void init() {
    setScaleType(ScaleType.MATRIX);
}

public void rotate(float angle) {
    Matrix m = new Matrix();
    m.postRotate(angle);

    setImageMatrix(m);

    invalidate();
}

public void scale(float scaleFactor) {
    Matrix m = new Matrix();
    m.postScale(scaleFactor, scaleFactor);

    setImageMatrix(m);

    invalidate();
}

我曾尝试使用 Matrix 的 set* 函数,但没有奏效。我尝试每次在旋转和缩放函数中而不是在 init 中设置缩放类型,但这不起作用。我试图 getImageMatrix 而不是每次都创建一个新的矩阵(即创建一个身份矩阵),但这没有用。

我知道旋转和缩放函数是通过调试器调用的。

显然我错过了一些东西。我试图了解我所缺少的。

上面的代码应该工作吗?我是否误解了 Matrix 的工作原理?

4

1 回答 1

1

看到我的anseer这个问题如何维护多层ImageViews并根据最大的一个保持它们的纵横比?,该代码使用可以由您想要的任何矩阵转换的层

于 2013-09-18T19:41:32.227 回答