zoukankan      html  css  js  c++  java
  • 单点触控与多点触控

    package com.example.administrator.zuo;
    
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Matrix;
    import android.graphics.PointF;
    import android.os.Bundle;
    import android.util.FloatMath;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity implements View.OnTouchListener {
        //放大缩小
        Matrix matrix=new Matrix();
        Matrix savedMatrix=new Matrix();
    
        PointF start=new PointF();
        PointF mid=new PointF();
        float oldDist;
    
        private ImageView myImageView;
    
        //模式
        static final int NONE=0;
        static final int DRAG=1;
        static final int ZOOM=2;
        int mode=NONE;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ImageView img= (ImageView) findViewById(R.id.imageView);
    
        img.setOnTouchListener(this);
    
    
        }
    
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            ImageView myImageView=(ImageView) v;
            //应用于多点触摸操作
            switch(event.getAction()&MotionEvent.ACTION_MASK){
                //设置拖拉模式
                case MotionEvent.ACTION_DOWN:
                    matrix.set(myImageView.getImageMatrix());
                    savedMatrix.set(matrix);
                    start.set(event.getX(),event.getY());
                    mode=DRAG;
                    break;
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_POINTER_UP:
                    mode=NONE;
                    break;
    
                //设置多点触摸模式
                case MotionEvent.ACTION_POINTER_DOWN:
                    oldDist=spacing(event);
                    if(oldDist>10f){
                        savedMatrix.set(matrix);
                        midPoint(mid, event);
                        mode=ZOOM;//放大
                    }
                    break;
                //若为DRAG模式,则点击移动图片
                case MotionEvent.ACTION_MOVE:
                    if(mode==DRAG){
                        matrix.set(savedMatrix);
                        matrix.postTranslate(event.getX()-start.x,event.getY()-start.y);
                    }
                    //若为ZOOM模式,则点击触摸缩放
                    else if(mode==ZOOM){
                        float newDist=spacing(event);
                        if(newDist>10f){
                            matrix.set(savedMatrix);
                            float scale=newDist/oldDist;
                            //设置硕放比例和图片的中点位置
                            matrix.postScale(scale,scale, mid.x,mid.y);
                        }
                    }
                    break;
            }
            myImageView.setImageMatrix(matrix);
            return true;
        }
    
        //计算移动距离
        private float spacing(MotionEvent event){
            float x=event.getX(0)-event.getX(1);
            float y=event.getY(0)-event.getY(1);
            return FloatMath.sqrt(x * x + y * y);
        }
        //计算中点位置
        private void midPoint(PointF point,MotionEvent event){
            float x=event.getX(0)+event.getX(1);
            float y=event.getY(0)+event.getY(1);
            point.set(x / 2, y / 2);
        }
    }
  • 相关阅读:
    如何更专业的使用Chrome开发者工具
    Javascript中的Object对象
    【leetcode】 Remove Duplicates from Sorted List
    Windows上x86程序正常但x64程序崩溃问题
    Microsoft source-code annotation language (SAL) 相关
    Visual Studio 2013 编译CEF步骤
    C++中调用Python脚本
    MFCButton Memory leak(内存泄露问题)
    快速排序
    插入排序
  • 原文地址:https://www.cnblogs.com/8023-itxinde/p/5381129.html
Copyright © 2011-2022 走看看