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);
        }
    }
  • 相关阅读:
    Ubuntu 18.04更换国内源方法
    CTFHub-Web-Web前置技能-PHPINFO
    CTFHub-Web-Web前置技能-目录遍历
    Python-字符串常见操作
    hadoop完全分布式虚拟机多机克隆后网卡配置
    N皇后问题 回溯非递归算法 C++实现2
    N皇后问题 回溯非递归算法 C++实现1
    N皇后问题 回溯递归算法 C++实现2
    N皇后问题 回溯递归算法 C++实现1
    无法更新运行时文件夹共享状态:在客户机操作系统内装载共享文件夹文件系统时出错——解决方案
  • 原文地址:https://www.cnblogs.com/8023-itxinde/p/5381129.html
Copyright © 2011-2022 走看看