在Android中对ImageView进行双指捏合缩放和旋转的操作。

6

我有一个问题已经困扰我两天了,由于我是新手,无法解决。实际上,我正在开发一个需要在Android ImageView上进行双指缩放和旋转的Android应用程序。我找到了多个教程和解决方案,可以很好地实现双指缩放,但对于双指旋转则不起作用。我分享了最简单易懂的教程,并希望将其扩展为双指旋转。以下是代码片段:

    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,也就是说,除了Android ImageView之外,我想使用GPUImage。如何将GPUImage转换为ImageView?这是第二件事。首先,我想实现双指旋转(或某种意义上的多点触控)。谢谢。

2个回答

3
这是对我有效的解决方案。 https://dev59.com/YWgv5IYBdhLWcg3wVPTU#18276033 只需添加一行代码:
  1. 在活动内的 OnRotation(RotationGestureDetector rotationDetector) 方法中添加 imageView.setRotation(imageView.getRotation()+(-angle));,以将新的旋转值设置到 ImageView 上。
这只是基本帮助,实现的其余部分非常好。

这是我之前发布的一个解决方案。https://dev59.com/rVjUa4cB1Zd3GeqPVuiV#47861501 - user2288580

1
这是我创建的库,它可以创建一个可拖动、旋转和缩放的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:设置ontouch方法。
iv.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return iv.onTouch(v,event);
            }
        });

就是这样。


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