Android攻城狮 multi-touch多点触摸

 1 //多点触摸的简单应用----拖动图片
 2 public class MainActivity extends Activity {
 3     private FrameLayout root;
 4     private ImageView imageView;
 5 
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10         imageView = (ImageView) findViewById(R.id.image);
11         root = (FrameLayout) findViewById(R.id.container);
12         // 监听触摸事件
13         root.setOnTouchListener(new OnTouchListener() {
14 
15             @Override
16             public boolean onTouch(View v, MotionEvent event) {
17                 // TODO Auto-generated method stub
18                 switch (event.getAction()) {
19                 // 触摸按下
20                 case MotionEvent.ACTION_DOWN:
21                     System.out.println("----->>ACTION_DOWN");
22                     break;
23                 // 触摸移动
24                 case MotionEvent.ACTION_MOVE:
25                     System.out.println("----->>ACTION_MOVE");
26                     // 获取一个触摸点
27                     System.out.println(String.format("x:%f,y:%f", event.getX(),
28                             event.getY()));
29                     // ---------获取一个安卓Android触摸点坐标-----拖动图片----------------
30                     FrameLayout.LayoutParams lp = (LayoutParams) imageView
31                             .getLayoutParams();
32                     lp.leftMargin = (int) event.getX();
33                     lp.topMargin = (int) event.getY();
34                     imageView.setLayoutParams(lp);
35 
36                     System.out.println("===>>触摸点个数" + event.getPointerCount());
37                     // 获取多个触摸点----只能在真机上测试
38                     // System.out.println(String.format("x1:%f y1:%f,x2:%f, y2:%f",
39                     // event.getX(0),event.getY(0),event.getX(1),event.getY(2)));
40                     break;
41                 // 触摸抬起
42                 case MotionEvent.ACTION_UP:
43                     System.out.println("----->>ACTION_UP");
44                     break;
45 
46                 default:
47                     break;
48                 }
49                 return true;// 后续事件是否需要被触发
50             }
51         });
52     }
53 
54 }
 1 //多点触摸的简单应用----实现图片的放大缩小
 2 public class MainActivity extends Activity {
 3     private FrameLayout root;
 4     private ImageView imageView;
 5 
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10         imageView = (ImageView) findViewById(R.id.image);
11         root = (FrameLayout) findViewById(R.id.container);
12         // 监听触摸事件
13         root.setOnTouchListener(new OnTouchListener() {
14             float currentDistance;
15             float lastDistance = -1;
16 
17             @Override
18             public boolean onTouch(View v, MotionEvent event) {
19 
20                 // TODO Auto-generated method stub
21                 switch (event.getAction()) {
22                 // 触摸按下
23                 case MotionEvent.ACTION_DOWN:
24                     System.out.println("----->>ACTION_DOWN");
25                     break;
26                 // 触摸移动
27                 case MotionEvent.ACTION_MOVE:
28                     if (event.getPointerCount() >= 2) {
29                         // 计算两点之间的距离
30                         float offsetX = event.getX(0) - event.getX(1);
31                         float offsetY = event.getY(0) - event.getY(1);
32                         currentDistance = (float) Math.sqrt(offsetX * offsetX
33                                 + offsetY * offsetY);
34                     }
35                     if (lastDistance < 0) {// 初始化
36                         lastDistance = currentDistance;
37                     } else {
38                         if (currentDistance - lastDistance > 5) {
39                             System.out.println("放大");
40                             FrameLayout.LayoutParams lp = (LayoutParams) imageView
41                                     .getLayoutParams();
42                             lp.width = (int) (imageView.getWidth() * 1.1);
43                             lp.height = (int) (imageView.getHeight() * 1.1);
44                             imageView.setLayoutParams(lp);
45                             lastDistance = currentDistance;
46 
47                         } else if (currentDistance - lastDistance < 5) {
48                             System.out.println("缩小");
49                             FrameLayout.LayoutParams lp = (LayoutParams) imageView
50                                     .getLayoutParams();
51                             lp.width = (int) (imageView.getWidth() * 0.9);
52                             lp.height = (int) (imageView.getHeight() * 0.9);
53                             imageView.setLayoutParams(lp);
54                             lastDistance = currentDistance;
55                         }
56                     }
57                     System.out.println("----->>ACTION_MOVE");
58                     // 获取一个触摸点
59                     System.out.println(String.format("x:%f,y:%f", event.getX(),
60                             event.getY()));
61 
62                     System.out.println("===>>触摸点个数" + event.getPointerCount());
63                     // 获取多个触摸点----只能在真机上测试
64                     // System.out.println(String.format("x1:%f y1:%f,x2:%f, y2:%f",
65                     // event.getX(0),event.getY(0),event.getX(1),event.getY(2)));
66                     break;
67                 // 触摸抬起
68                 case MotionEvent.ACTION_UP:
69                     System.out.println("----->>ACTION_UP");
70                     break;
71 
72                 default:
73                     break;
74                 }
75                 return true;// 后续事件是否需要被触发
76             }
77         });
78     }
79 
80 }
原文地址:https://www.cnblogs.com/my334420/p/6904264.html