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);
        }
    }
  • 相关阅读:
    编写第一个MapReduce程序—— 统计气温
    Oracle常用操作——创建表空间、临时表空间、创建表分区、创建索引、锁表处理
    Linux环境安装Eclipse及配置hadoop插件
    Hadoop的核心组件和生态圈
    安装hadoop集群服务器(hadoop1.2.1)
    python入门到精通[三]:基础学习(2)
    python入门到精通[二]:基础学习(1)
    com.mysql.jdbc.Driver 与 org.gjt.mm.mysql.Driver的区别
    Intellij IDEA中修改Maven项目的项目名称
    对CountDownLatch的初步学习
  • 原文地址:https://www.cnblogs.com/8023-itxinde/p/5381129.html
Copyright © 2011-2022 走看看