• 10_多点触摸交互处理


      多点触摸,对图像进行缩放的实例。

     1 package com.example.multitouch;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.view.MotionEvent;
     6 import android.view.View;
     7 import android.view.WindowManager;
     8 import android.widget.FrameLayout;
     9 import android.widget.FrameLayout.LayoutParams;
    10 import android.widget.ImageView;
    11 
    12 public class MainActivity extends Activity {
    13 
    14     private FrameLayout root;
    15     private ImageView iv;
    16 
    17     @Override
    18     protected void onCreate(Bundle savedInstanceState) {
    19         super.onCreate(savedInstanceState);
    20         setContentView(R.layout.activity_main);
    21 
    22         root = (FrameLayout) findViewById(R.id.container);
    23         iv = (ImageView) findViewById(R.id.iv);
    24 
    25         root.setOnTouchListener(new View.OnTouchListener() {
    26 
    27             float currentDistance;
    28             float lastDistance = -1;
    29 
    30             FrameLayout.LayoutParams lp = (LayoutParams) iv.getLayoutParams();
    31 
    32             @Override
    33             public boolean onTouch(View v, MotionEvent event) {
    34 
    35                 switch (event.getAction()) {
    36                 case MotionEvent.ACTION_DOWN:
    37                     System.out.println("action_down");
    38                     break;
    39                 case MotionEvent.ACTION_MOVE:
    40                     System.out.println("action_move");
    41 
    42                     if (event.getPointerCount() >= 2) {
    43 
    44                         float offsetX = event.getX(0) - event.getX(1);
    45                         float offsetY = event.getY(0) - event.getY(1);
    46                         currentDistance = (float) Math.sqrt(offsetX * offsetX
    47                                 + offsetY * offsetY);
    48 
    49                         if (lastDistance < 0) {
    50                             lastDistance = currentDistance;
    51                         } else {
    52                             if (currentDistance - lastDistance > 5) {
    53                                 System.out.println("放大");
    54 
    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                                 lp.width = (int) (0.9f * iv.getWidth());
    64                                 lp.height = (int) (0.9f * iv.getHeight());
    65                                 iv.setLayoutParams(lp);
    66                                 lastDistance = currentDistance;
    67                             }
    68                         }
    69                     }
    70 
    71                     // 获取到多个触摸点
    72                     // System.out.println("pointer count : " +
    73                     // event.getPointerCount() );
    74                     // System.out.println(String.format("x1:%f y1:%f",
    75                     // event.getX(0),event.getY(0)));
    76 
    77                     // FrameLayout.LayoutParams lp = (LayoutParams)
    78                     // iv.getLayoutParams();
    79                     // lp.leftMargin = (int) event.getX();
    80                     // lp.topMargin = (int) event.getY();
    81                     //
    82                     // iv.setLayoutParams(lp);
    83                     //
    84                     // System.out.println(String.format("x:%f,y:%f",
    85                     // event.getX(), event.getY() ));
    86                     break;
    87                 case MotionEvent.ACTION_UP:
    88                     System.out.println("action_up");
    89                     break;
    90                 }
    91 
    92                 // 返回true的话,事件才会继续被触发。
    93                 return true;
    94             }
    95         });
    96     }
    97 }
    MainActivity
     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.example.multitouch.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>
    activity_main.xml
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.example.multitouch"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6 
     7     <uses-sdk
     8         android:minSdkVersion="14"
     9         android:targetSdkVersion="19" />
    10 
    11     <application
    12         android:allowBackup="true"
    13         android:icon="@drawable/ic_launcher"
    14         android:label="@string/app_name"
    15         android:theme="@style/AppTheme" >
    16         <activity
    17             android:name="com.example.multitouch.MainActivity"
    18             android:label="@string/app_name" >
    19             <intent-filter>
    20                 <action android:name="android.intent.action.MAIN" />
    21 
    22                 <category android:name="android.intent.category.LAUNCHER" />
    23             </intent-filter>
    24         </activity>
    25     </application>
    26 
    27 </manifest>
    AndroidManifest.xml

     

  • 相关阅读:
    构建之法读书笔记04
    团队冲刺06
    12.23——周总
    团队冲刺05
    团队冲刺04
    用户场景分析
    团队冲刺03
    返回一个二维数组中最大联通子数组的和
    团队冲刺02
    FFT/NTT基础题总结
  • 原文地址:https://www.cnblogs.com/510602159-Yano/p/4065329.html
Copyright © 2020-2023  润新知