Here是一个执行 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>
但是使用imageView.setImageMatrix(matrix);
不是实际的图片视图。
因此以下结果:
初始ImageView:
向右拖动:
放大:
关于旋转:
有没有办法可以修改 ImageView 按照矩阵进行更改?
答案 0 :(得分:3)
您可以在任何视图上致电View.setRotation()
,View.setPivotX()
,View.setPivotY()
,View.setScaleX()
,View.setScaleY()
,View.setTranslationX()
和View.setTranslationY()
包括ImageView
。
参考:http://developer.android.com/reference/android/view/View.html
答案 1 :(得分: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);
答案 2 :(得分: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();