我在过去的两天里遇到了一个问题,因为我是新手,无法解决这个问题。实际上,我正在开发一款安卓应用程序,它需要在安卓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,我的意思是,尽管有安卓ImageView,但我还是想使用GPUImage。如何将GPUImage转换为ImageView?这是第二件事。首先,我想实现2指旋转(从某种意义上说是MultiTouch )。谢谢
发布于 2016-04-24 18:13:04
这是对我有好处的解决办法。https://stackoverflow.com/a/18276033只需在这里添加一行,这应该是
imageView.setRotation(imageView.getRotation() + (-angle));在OnRotation(RotationGestureDetector rotationDetector)方法中,将新的旋转值设置为ImageView这是为了基本的帮助。其余的实现都很好。
发布于 2019-12-17 03:15:58
这是我创建的库,它创建了一个可以拖动、旋转和缩放的imageview类。
需求:(添加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:设置ontouchmethod方法
iv.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return iv.onTouch(v,event);
}
});仅此而已。
https://stackoverflow.com/questions/36786060
复制相似问题