多点触摸的操作与图片放大缩小

 1 import android.app.Activity;
 2 import android.os.Bundle;
 3 import android.view.MotionEvent;
 4 import android.view.View;
 5 import android.widget.FrameLayout;
 6 import android.widget.FrameLayout.LayoutParams;
 7 import android.widget.ImageView;
 8 
 9 public class MainActivity extends Activity {
10     
11     private ImageView iv;
12     private FrameLayout root;
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_main);
18 
19         root = (FrameLayout) findViewById(R.id.container);
20         iv = (ImageView) findViewById(R.id.iv);
21 
22         root.setOnTouchListener(new View.OnTouchListener() {
23 
24             float currentDistance;
25             float lastDistance = -1; // 记录最有一次所记录的值
26 
27             @Override
28             public boolean onTouch(View v, MotionEvent event) {
29 
30                 switch (event.getAction()) {
31                 case MotionEvent.ACTION_DOWN: // 触摸按下
32                     System.out.println("action down");
33                     break;
34                 case MotionEvent.ACTION_MOVE: // 触摸移动
35                     // System.out.println("action move");
36                     System.out.println("触摸点个数:" + event.getPointerCount());
37 
38                     if (event.getPointerCount() >= 2) { // 判断大于等于两个触摸点
39 
40                         float offsetX = event.getX(0) - event.getX(1);
41                         float offsetY = event.getY(0) - event.getY(1);
42                         // 计算出两个点之间的距离
43                         currentDistance = (float) Math.sqrt(offsetX * offsetX
44                                 + offsetY * offsetY);
45 
46                         if (lastDistance < 0) { // 初始值
47                             lastDistance = currentDistance;
48                         } else {
49                             // 当前距离比上次距离>5个像素,可以识别为放大。
50                             if (currentDistance - lastDistance > 5) { 
51                                 System.out.println("放大");
52 
53                                 FrameLayout.LayoutParams lp = (LayoutParams) iv
54                                         .getLayoutParams();
55                                 lp.width = (int) (1.1f * iv.getWidth());
56                                 lp.height = (int) (1.1f * iv.getHeight());
57 
58                                 iv.setLayoutParams(lp);
59 
60                                 lastDistance = currentDistance;
61                             } else if (lastDistance - currentDistance > 5) { //
62                                 System.out.println("缩小");
63 
64                                 FrameLayout.LayoutParams lp = (LayoutParams) iv
65                                         .getLayoutParams();
66                                 lp.width = (int) (0.9f * iv.getWidth());
67                                 lp.height = (int) (0.9f * iv.getHeight());
68 
69                                 iv.setLayoutParams(lp);
70 
71                                 lastDistance = currentDistance;
72                             }
73                         }
74                     }
75                     break;
76                 case MotionEvent.ACTION_UP: // 触摸弹起
77                     // System.out.println("action up");
78                     break;
79                 }
80 
81                 return true;
82             }
83         });
84     }
85 
86 }
 1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:id="@+id/container"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     tools:context="com.jikexueyuan.multouch.MainActivity"
 7     tools:ignore="MergeRootFrame" >
 8 
 9     <ImageView
10         android:id="@+id/iv"
11         android:layout_width="wrap_content"
12         android:layout_height="wrap_content"
13         android:src="@drawable/ic_launcher" />
14 
15 </FrameLayout>
原文地址:https://www.cnblogs.com/androidsj/p/3948584.html