双指缩放和两指旋转 ImageView Android
Pinch Zoom and 2 finger Rotation the ImageView in Android
我最近 2 天遇到了一个问题,由于我是新手,所以无法解决。实际上,我正在开发一个 Android 应用程序,它需要在 Android ImageView 上进行双指缩放和两指旋转。我得到了多个教程和解决方案,这些教程和解决方案适用于双指缩放,但不适用于 2 指旋转。我正在分享最简单易懂的教程,我想将其扩展为 2 指旋转。这是代码片段:
public class MainActivity extends Activity {
private ImageView mImageView;
private Matrix mMatrix = new Matrix();
private float mScale = 1f;
private ScaleGestureDetector mScaleGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = (ImageView) findViewById(R.id.imageView);
mScaleGestureDetector = new ScaleGestureDetector(this, new ScaleListener());
}
public boolean onTouchEvent(MotionEvent ev) {
mScaleGestureDetector.onTouchEvent(ev);
return true;
}
private class ScaleListener extends ScaleGestureDetector.
SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
mScale *= detector.getScaleFactor();
mScale = Math.max(0.1f, Math.min(mScale, 5.0f));
mMatrix.setScale(mScale, mScale);
mImageView.setImageMatrix(mMatrix);
return true;
}
}
}
我还想将它们用于 GPUImage,我的意思是尽管有 AndroidImageView,我还是想使用 GPUImage。如何将 GPUImage 转换为 ImageView?这是第二件事。首先,我想实现 2 指旋转(或某种意义上的 MultiTouch)。谢谢
这是对我有用的解决方案。 我应该在这里添加一行,应该是
- 在
OnRotation(RotationGestureDetector rotationDetector)
方法中添加 imageView.setRotation(imageView.getRotation() + (-angle));
activity 以将新的旋转值设置为 ImageView
这是基本帮助。剩下的实现就好了
这是我创建的库,它创建了一个imageviewclass可以拖动、旋转和缩放
要求:(添加 build.gradle)
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
添加依赖项
dependencies {
implementation 'com.github.lau1944:Zoom-Drag-Rotate-ImageView:1.0.0'
}
首先,在 xml 上添加图像:
<com.easystudio.rotateimageview.RotateZoomImageView
android:id="@+id/rotate"
android:layout_width="150dp"
android:layout_height="150dp"
android:src="@drawable/money"/>
或以编程方式添加:
RotateZoomImageView iv;
RelativeLayout playground = findViewById(R.id.playground);
iv = new RotateZoomImageView(getApplicationContext());
iv.setImageDrawable(getDrawable(R.drawable.money));
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(250, 250);
lp.addRule(RelativeLayout.BELOW);
iv.setLayoutParams(lp);
playground.addView(iv);
第 2 步:设置 ontouch 方法
iv.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return iv.onTouch(v,event);
}
});
就是这样。
我最近 2 天遇到了一个问题,由于我是新手,所以无法解决。实际上,我正在开发一个 Android 应用程序,它需要在 Android ImageView 上进行双指缩放和两指旋转。我得到了多个教程和解决方案,这些教程和解决方案适用于双指缩放,但不适用于 2 指旋转。我正在分享最简单易懂的教程,我想将其扩展为 2 指旋转。这是代码片段:
public class MainActivity extends Activity {
private ImageView mImageView;
private Matrix mMatrix = new Matrix();
private float mScale = 1f;
private ScaleGestureDetector mScaleGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = (ImageView) findViewById(R.id.imageView);
mScaleGestureDetector = new ScaleGestureDetector(this, new ScaleListener());
}
public boolean onTouchEvent(MotionEvent ev) {
mScaleGestureDetector.onTouchEvent(ev);
return true;
}
private class ScaleListener extends ScaleGestureDetector.
SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
mScale *= detector.getScaleFactor();
mScale = Math.max(0.1f, Math.min(mScale, 5.0f));
mMatrix.setScale(mScale, mScale);
mImageView.setImageMatrix(mMatrix);
return true;
}
}
}
我还想将它们用于 GPUImage,我的意思是尽管有 AndroidImageView,我还是想使用 GPUImage。如何将 GPUImage 转换为 ImageView?这是第二件事。首先,我想实现 2 指旋转(或某种意义上的 MultiTouch)。谢谢
这是对我有用的解决方案。 我应该在这里添加一行,应该是
- 在
OnRotation(RotationGestureDetector rotationDetector)
方法中添加imageView.setRotation(imageView.getRotation() + (-angle));
activity 以将新的旋转值设置为 ImageView
这是基本帮助。剩下的实现就好了
这是我创建的库,它创建了一个imageviewclass可以拖动、旋转和缩放
要求:(添加 build.gradle)
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
添加依赖项
dependencies {
implementation 'com.github.lau1944:Zoom-Drag-Rotate-ImageView:1.0.0'
}
首先,在 xml 上添加图像:
<com.easystudio.rotateimageview.RotateZoomImageView
android:id="@+id/rotate"
android:layout_width="150dp"
android:layout_height="150dp"
android:src="@drawable/money"/>
或以编程方式添加:
RotateZoomImageView iv;
RelativeLayout playground = findViewById(R.id.playground);
iv = new RotateZoomImageView(getApplicationContext());
iv.setImageDrawable(getDrawable(R.drawable.money));
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(250, 250);
lp.addRule(RelativeLayout.BELOW);
iv.setLayoutParams(lp);
playground.addView(iv);
第 2 步:设置 ontouch 方法
iv.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return iv.onTouch(v,event);
}
});
就是这样。