多点触摸的操作与图片放大缩小
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>