Android多点触控
16lz
2021-12-04
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只能监控到第一个动作(即按下动作) } }); }}
更多相关文章
- Android中android:layout_width与 android:width有什么区别?
- 详解android:scaleType属性
- android ImageView的属性android:scaleType,即ImageView.setScale
- 一个 当前点击元素放大的效果
- 谷歌「双十一」也放大招:Colab上可以免费使用P100 GPU了
- 基于Zynq SoC的D类音频放大器
- iOS图片预览、放大缩小
- 几款堪称神器的图片无损放大缩小工具!
- android 两指缩放图片 event.getActionMasked() 方法的使用