拖动、缩放或旋转 ImageView

3
这里是一个执行ImageView的拖曳、缩放和旋转的类,请点击 这里 进入源代码。

接下来是xml相关内容。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="matrix"
        android:src="@drawable/butterfly" />

</FrameLayout>

但所有操作都是在 ImageViewMatrix 上完成的,使用 imageView.setImageMatrix(matrix);

而不是实际的图像视图。

因此,以下是结果:

初始 ImageView:

enter image description here

向右拖动:

enter image description here

缩小:

enter image description here

旋转:

enter image description here

我是否可以修改 ImageView 以根据其 Matrix 进行更改?

3个回答

3

1

您真的想翻译imageView吗?如果不是,您可以使用 setRectToRect(RectF src, RectF dst, Matrix.ScaleToFit stf)将已翻译的图像显示在原始视图中心。

Matrix m = imageView.getImageMatrix();
RectF drawableRect = new RectF(0, 0, imageWidth, imageHeight);
RectF viewRect = new RectF(0, 0, imageView.getWidth(), imageView.getHeight());
m.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER);
imageView.setImageMatrix(m);

0

对于拖动,计算移动的距离并将其添加到左侧和顶部边距中

就像这样

x = event.getRawX();
y = event.getRawY();

parms.leftMargin = (int) ((x - dx) + scalediff);
parms.topMargin = (int) ((y - dy) + scalediff);

而且,你可以使用ScaleX和ScaleY方法进行缩放

view.setScaleX(scale);
view.setScaleY(scale);

并且用于旋转

view.animate().rotationBy(angle).setDuration(0).setInterpolator(new LinearInterpolator()).start();

当使用不同的父布局(如ConstraintLayout)时,此代码在旋转图像180度并开始拖动后会出现意外行为,视图会快速移动并从屏幕上消失。正在努力修复中,很快会发布更新。 - jitain sharma

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