java使用手势移动和缩放图像(代码片段)

author author     2022-12-22     332

关键词:

package com.develer.circularsliderule;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;

public class MyImageView extends View 

private static final int INVALID_POINTER_ID = -1;

    private Drawable mImage;
    private float mPosX;
    private float mPosY;

    private float mLastTouchX;
    private float mLastTouchY;
    private int mActivePointerId = INVALID_POINTER_ID;

    private ScaleGestureDetector mScaleDetector;
    private float mScaleFactor = 1.f;

    public MyImageView(Context context) 
        this(context, null, 0);
    mImage = getResources().getDrawable(R.drawable.ic_launcher);

        mImage.setBounds(0, 0, mImage.getIntrinsicWidth(), mImage.getIntrinsicHeight());
    

    public MyImageView(Context context, AttributeSet attrs) 
        this(context, attrs, 0);
    

    public MyImageView(Context context, AttributeSet attrs, int defStyle) 
        super(context, attrs, defStyle);
        mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
    

    @Override
    public boolean onTouchEvent(MotionEvent ev) 
        // Let the ScaleGestureDetector inspect all events.
        mScaleDetector.onTouchEvent(ev);

        final int action = ev.getAction();
        switch (action & MotionEvent.ACTION_MASK) 
        case MotionEvent.ACTION_DOWN: 
            final float x = ev.getX();
            final float y = ev.getY();

            mLastTouchX = x;
            mLastTouchY = y;
            mActivePointerId = ev.getPointerId(0);
            break;
        

        case MotionEvent.ACTION_MOVE: 
            final int pointerIndex = ev.findPointerIndex(mActivePointerId);
            final float x = ev.getX(pointerIndex);
            final float y = ev.getY(pointerIndex);

            // Only move if the ScaleGestureDetector isn't processing a gesture.
            if (!mScaleDetector.isInProgress()) 
                final float dx = x - mLastTouchX;
                final float dy = y - mLastTouchY;

                mPosX += dx;
                mPosY += dy;

                invalidate();
            

            mLastTouchX = x;
            mLastTouchY = y;

            break;
        

        case MotionEvent.ACTION_UP: 
            mActivePointerId = INVALID_POINTER_ID;
            break;
        

        case MotionEvent.ACTION_CANCEL: 
            mActivePointerId = INVALID_POINTER_ID;
            break;
        

        case MotionEvent.ACTION_POINTER_UP: 
            final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) 
                    >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
            final int pointerId = ev.getPointerId(pointerIndex);
            if (pointerId == mActivePointerId) 
                // This was our active pointer going up. Choose a new
                // active pointer and adjust accordingly.
                final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
                mLastTouchX = ev.getX(newPointerIndex);
                mLastTouchY = ev.getY(newPointerIndex);
                mActivePointerId = ev.getPointerId(newPointerIndex);
            
            break;
        
        

        return true;
    

    @Override
    public void onDraw(Canvas canvas) 
        super.onDraw(canvas);
        
        float pivotX, pivotY;
        pivotX = mImage.getIntrinsicWidth()/2;
        pivotY = mImage.getIntrinsicHeight()/2;

        canvas.save();
        Log.d("DEBUG", "X: "+mPosX+" Y: "+mPosY);
        Log.d("DEBUG", "pivotX: "+pivotX+" pivotY: "+pivotY);
        canvas.translate(mPosX, mPosY);
        canvas.scale(mScaleFactor, mScaleFactor, pivotX, pivotY);
        mImage.draw(canvas);
        canvas.restore();
    

    private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener 
        @Override
        public boolean onScale(ScaleGestureDetector detector) 
            mScaleFactor *= detector.getScaleFactor();

            // Don't let the object get too small or too large.
            mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 10.0f));

            invalidate();
            return true;
        
    

UIImageView 上的捏合、平移和双击手势

...放图像时,移动图像和图像视图不应平移超过边界之一我使用教程尝试了以下代码,但平移无 查看详情

使用手势对uiimageview进行缩放旋转和移动

 [cpp] viewplain copy// 添加所有的手势  - (void) addGestureRecognizerToView:(UIView *)view  {      // 旋转手势   查看详情

在iOS中的iPad上捏缩放将图像移动到最左角?

...我捏住它移动到左上角的图像时,我在图像上添加了捏合手势。我还在图像上添加了平移手势。当图像被缩放时,我会向各个方向滚动图像,为此我已将平移手势添加到图像中。我的代码是:-(void)vi 查看详情

java手势控制亮度,音量,缩放(代码片段)

查看详情

html旋转,移动,缩放图像动画(代码片段)

查看详情

halcon图像的自适应显示缩放移动(代码片段)

【Halcon】图像的自适应显示、缩放、移动前言:用滚轮实现图像缩放图像的拖动前言:引入Halcon库usingHalconDotNet;自适应窗显示使图片根据窗口大小自适应显示,通过计算控件的图像显示范围(左上行列、右下行列坐标);用到HOp... 查看详情

使用 Android 内置的手势监听器和缩放监听器实现捏缩放和拖动

】使用Android内置的手势监听器和缩放监听器实现捏缩放和拖动【英文标题】:ImplementingpinchzoomanddragusingAndroid\'sbuildingesturelistenerandscalelistener【发布时间】:2013-10-2511:31:26【问题描述】:我正在尝试使用Android的手势监听器和缩放... 查看详情

如何移动和缩放图像[关闭]

...怎样才能做到这一点?提前致谢【问题讨论】:是否可以使用这个裁剪图像的选定部分?您的所有问题都已得到解答:[运动图像][1]、[缩放图像][2 查看详情

SwiftUI - 缩放、缩放和裁剪图像

...oomandCropImage【发布时间】:2020-01-2317:37:25【问题描述】:使用linktorepository编辑。我正在使用SwiftUI,因此无法访问“裁剪视图”。我使用手势而不是ScrollView来捕获图像的缩放级别和偏移量(x和y)。我无法返回根据这些因素正确... 查看详情

iOS5 中的图像移动和缩放问题

...才能移动和缩放图像。但是相同的功能在iOS4.2.1中也可以使用。我的意思是在不缩放图像的情况下 查看详情

使用 UIPanGestureRecognizer 缩放和移动 UIView

】使用UIPanGestureRecognizer缩放和移动UIView【英文标题】:ScaleandmoveanUIViewusingUIPanGestureRecognizer【发布时间】:2017-11-0911:01:21【问题描述】:我有一个UIViewA。我在视图A上放了一个图标,并尝试使用平移手势来缩放和移动此视图A。我... 查看详情

android图片处理一:matrix与手势(代码片段)

文章目录1矩阵基础1.1左乘和右乘2Matrix基础2.1平移2.2缩放2.3旋转2.4Matrix常用方法2.4.1setRectToRect2.4.2mapRect2.4.3setPolyToPoly3PinchImageView分析3.1双击、惯性滑动3.1.1双击3.1.2惯性滑动(Fling)3.2双指缩放、单指移动3.2.1双指缩放3.2.1... 查看详情

缩放和平移仅适用于第一次尝试使用 Windows Phone 的手势监听器

】缩放和平移仅适用于第一次尝试使用WindowsPhone的手势监听器【英文标题】:ZoomingandpanningonlyworkonfirsttryusinggesturelistenerforWindowsPhone【发布时间】:2013-11-1514:01:42【问题描述】:我是windowsphone开发的新手,我正在尝试使用Microsoft.P... 查看详情

使用引导程序缩放图像(代码片段)

我使用了Bootstraps行功能并使用了代码:<divclass="col-md-1"><imgsrc="1.jpg"/></div>我发现放大和缩小时图像不会随列缩放。我试过用来包装我的图像,这没用。我尝试手动缩放它,但在放大和缩小时会改变。最后我尝试使用... 查看详情

图像裁剪为矩形,它应该移动

...我,我很挣扎。【问题讨论】:【参考方案1】:您可以使用下面的代码添加平移手势,您可以从中移动图像视图和捏合手势,您可以通过该手势调整图像大小-(void)addGestur 查看详情

不使用 UIScrollview 缩放 UIView

】不使用UIScrollview缩放UIView【英文标题】:ZoomUIViewwithoutusingUIScrollview【发布时间】:2012-06-0707:19:08【问题描述】:如何在不使用UIScrollBar的情况下缩放UIView?我可以添加捏合手势识别器,但是如何将缩放后的图像移动到选定区域... 查看详情

python图像缩放和falttening(代码片段)

查看详情

flutter系列之:移动端手势的具体使用(代码片段)

...天将会通过几个具体的例子来讲解一下GestureDetector的具体使用。赋予widget可以点击的功能一般情况下,我们的普通widget,比如文本是不能进行交互的,但是如果将其用GestureDetector进行包装之 查看详情