package com.xzs.multouch_test1;import android.support.constraint.ConstraintLayout;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.RelativeLayout;public class MainActivity extends AppCompatActivity {    private FrameLayout root;//activity_main中的主布局    private static final String TAG = "MainActivity";    private ImageView iv;//用来展示多点触控时 图片的放大缩小操作    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        root=(FrameLayout)findViewById(R.id.root);        iv=(ImageView) findViewById(R.id.iv);        root.setOnTouchListener(new View.OnTouchListener() {            float currentDistance;//用来保存当前两根手指的距离            float lastDistance=-1;//用来保存最后一次保存的两根手指的距离            @Override            public boolean onTouch(View view, MotionEvent motionEvent) {                switch(motionEvent.getAction()){                    case MotionEvent.ACTION_DOWN://当手指放下的时候触发                        //Log.d(TAG, "onTouch: +ACTION_DOWN");                        break;                    case MotionEvent.ACTION_MOVE://当手指滑动的时候触发                        //Log.d(TAG, "onTouch: +ACTION_MOVE");                        if(motionEvent.getPointerCount()>=2){//当为多点触控的时候,计算两根手指的距离并进行图片的放大缩小操作                            float offsetX=motionEvent.getX(0)-motionEvent.getX(1);                            float offsetY=motionEvent.getY(0)-motionEvent.getY(1);                            currentDistance=(float) Math.sqrt(offsetX*offsetX+offsetY*offsetY);                            if(lastDistance<0){                                lastDistance=currentDistance;                            }else{                                if(currentDistance-lastDistance>5){//为什么为5?因为要允许两根手指放上去时候的误差,不然两根手指一放上去照片就直接放大缩小放大缩小了。                                    Log.d(TAG, "放大 ");                                    FrameLayout.LayoutParams lp=(FrameLayout.LayoutParams)iv.getLayoutParams();                                    lp.width=(int)(1.1f*iv.getWidth());                                    lp.height=(int)(1.1f*iv.getHeight());                                    iv.setLayoutParams(lp);                                    lastDistance=currentDistance;                                }else if(lastDistance-currentDistance>5){                                    Log.d(TAG, "缩小");                                    FrameLayout.LayoutParams lp=(FrameLayout.LayoutParams)iv.getLayoutParams();                                    lp.width=(int)(0.9f*iv.getWidth());                                    lp.height=(int)(0.9f*iv.getHeight());                                    iv.setLayoutParams(lp);                                    lastDistance=currentDistance;                                }                            }                        }                        //Log.d(TAG, "point count: "+motionEvent.getPointerCount());                        //如果没有两个手指来触摸,就会报错。数组越界                        //Log.d(TAG, String.format("x1:%f y1:%f x2:%f y2:%f",motionEvent.getX(0),motionEvent.getY(0),motionEvent.getX(1),motionEvent.getY(1)));//                        FrameLayout.LayoutParams lp=(FrameLayout.LayoutParams) iv.getLayoutParams();//拖动图片//                        lp.leftMargin=(int)motionEvent.getX();//                        lp.topMargin=(int)motionEvent.getY();//                        iv.setLayoutParams(lp);                        //Log.d(TAG, (String.format("x:%f,y:%f" , motionEvent.getX(),motionEvent.getY())));                        break;                    case MotionEvent.ACTION_UP://当手指抬起来的时候触发                        //Log.d(TAG, "onTouch: +ACTION_UP");                        break;                }                return true;//返回True可以一直监控,返回False只能监控到第一个动作(即按下动作)            }        });    }}

更多相关文章

  1. Android中android:layout_width与 android:width有什么区别?
  2. 详解android:scaleType属性
  3. android ImageView的属性android:scaleType,即ImageView.setScale
  4. 一个 当前点击元素放大的效果
  5. 谷歌「双十一」也放大招:Colab上可以免费使用P100 GPU了
  6. 基于Zynq SoC的D类音频放大器
  7. iOS图片预览、放大缩小
  8. 几款堪称神器的图片无损放大缩小工具!
  9. android 两指缩放图片 event.getActionMasked() 方法的使用

随机推荐

  1. [置顶] Android(安卓)系列:环境搭建及Hell
  2. [翻译]Android单手指缩放-第四部分(Androi
  3. 2007年的Android和今日的大不一样
  4. Android网络功能之会话发起协议SIP
  5. Android美化之全局透明背景
  6. Android的Handler Looper Message机制应
  7. 阿里Android开发规范:进程、线程与消息通
  8. android后台进程的问题,大家各抒己见
  9. 批量处理ios破解后的资源文件为android所
  10. Android下的串口通信实战之控制客显