手指多点触控事件

  1 package com.itheima.touch;
  2
  3 import android.app.Activity;
  4 import android.graphics.Matrix;
  5 import android.graphics.PointF;
  6 import android.os.Bundle;
  7 import android.view.MotionEvent;
  8 import android.view.View;
  9 import android.view.View.OnTouchListener;
 10 import android.widget.ImageView;
 11
 12 public class MainActivity extends Activity {
 13
 14     private ImageView imageView;
 15
 16     @Override
 17     protected void onCreate(Bundle savedInstanceState) {
 18         super.onCreate(savedInstanceState);
 19         setContentView(R.layout.activity_main);
 20
 21         imageView = (ImageView) findViewById(R.id.imageView);
 22         imageView.setOnTouchListener(new MyOnTouchListener());        // 添加触摸监听器
 23     }
 24
 25     private class MyOnTouchListener implements OnTouchListener {
 26         private float x;        // 图片移动前的x轴坐标
 27         private float y;        // 图片移动前的y轴坐标
 28         private Matrix newMatrix = new Matrix();         // 用来移动图片的矩阵
 29         private Matrix oldMatrix = new Matrix();        // 图片移动前的矩阵
 30         private int type;        // 操作类型, 一根手指触摸还是两根手指触摸
 31         private float start;    // 第二根手指按下时的距离
 32         private float end;        // 两根手指移动后的距离
 33         private PointF point;    // 放大时的中心点
 34
 35         public boolean onTouch(View v, MotionEvent event) {
 36             switch (event.getAction() & MotionEvent.ACTION_MASK) {
 37                 case MotionEvent.ACTION_DOWN:
 38                     type = 1;
 39                     x = event.getX();
 40                     y = event.getY();
 41                     oldMatrix.set(imageView.getImageMatrix());
 42                     break;
 43                 case MotionEvent.ACTION_POINTER_DOWN:
 44                     type = 2;
 45                     start = countDistance(event);         // 计算第二根手指按下时两点之间的距离
 46                     point = countPoint(event);             // 计算中心点
 47                     oldMatrix.set(imageView.getImageMatrix());
 48                     break;
 49                 case MotionEvent.ACTION_MOVE:
 50                     newMatrix.set(oldMatrix);
 51                     if (type == 1) {     // 1根手指触摸
 52                         newMatrix.postTranslate(event.getX() - x, event.getY() - y);
 53                     } else {             // 2跟手指触摸
 54                         end = countDistance(event);     // 计算结束时距离
 55                         float scale = end / start;         // 计算缩放比例
 56                         newMatrix.postScale(scale, scale, point.x, point.y);     // 对模型进行缩放
 57                     }
 58                     break;
 59             }
 60             imageView.setImageMatrix(newMatrix);     // 改变图片
 61             return true;
 62         }
 63     }
 64
 65     public float countDistance(MotionEvent event) {
 66         float a = event.getX(1) - event.getX(0);     // x轴距离
 67         float b = event.getY(1) - event.getY(0);     // y轴距离
 68         return (float) Math.sqrt(a * a + b * b);     // 勾股定理
 69     }
 70
 71     public PointF countPoint(MotionEvent event) {
 72         float x = (event.getX(0) + event.getX(1)) / 2;     // x轴中间点
 73         float y = (event.getY(0) + event.getY(1)) / 2;     // y轴中间点
 74         return new PointF(x, y);
 75     }
 76
 77
 78     /*
 79     private class MyOnTouchListener implements OnTouchListener {
 80         private float x;
 81         private float y;
 82         private Matrix oldMatrix = new Matrix();
 83         private Matrix newMatrix = new Matrix();        // 用来操作图片的模型
 84
 85         public boolean onTouch(View v, MotionEvent event) {
 86             switch (event.getAction()) {                // 判断触摸动作的类型
 87                 case MotionEvent.ACTION_DOWN:             // 按下时
 88                     x = event.getX();                     // 获取x轴坐标
 89                     y = event.getY();                    // 获取y轴坐标
 90                     oldMatrix.set(imageView.getImageMatrix());        // 用模型记住图片所在位置
 91                     break;
 92                 case MotionEvent.ACTION_MOVE:             // 移动时
 93                     newMatrix.set(oldMatrix);             // 用另一个模型记住按下时的位置
 94                     newMatrix.postTranslate(event.getX() - x, event.getY() - y);    // 移动模型
 95                     break;
 96             }
 97             imageView.setImageMatrix(newMatrix);        // 把图片放到了移动后的模型中
 98             return true;
 99         }
100     }
101     */
102
103 }
时间: 2024-11-09 10:49:40

手指多点触控事件的相关文章

WPF 中如何屏蔽多点触控事件?

由于项目中还没有更好的多点触控思路,所以需要将多点触控暂时关闭: 关闭多点触控的代码只有一行: ? private void image_ManipulationStarting(object sender, ManipulationStartingEventArgs e) { e.Mode = ManipulationModes.None;  } 留个记录,以备日后用; 但是,ManipulationModes.None并不是乱用的,详情参照MSDN: http://msdn.microsof

【原】cocos2d-x开发笔记:多点触控

在项目开发中,我们做的大地图,一个手指头按下滑动可以拖动大地图,两个手指头按下张开或者闭合,可以放大和缩小地图 在实现这个功能的时候,需要使用到cocos2d-x的多点触控功能. 多点触控事件,并不是说你按下了两个手指,执行ccTouchesMoved的时候,pTouches的count为2,这样如果单纯的判断函数传入的参数,实现起来会比较困难. 我用一种方式实现了,感觉还是比较简单明了的,拿出来分享一下 cocos2d-x版本:cocos2d-x 2.2.0 目标平台:ios 1.首先在App

【WPF学习】第十八章 多点触控输入

多点触控(multi-touch)是通过触摸屏幕与应用程序进行交互的一种方式.多点触控输入和更传统的基于笔(pen-based)的输入的区别是多点触控识别手势(gesture)——用户可移动多根手指以执行常见操作的特殊方式.例如,在触摸屏上放置两根手指并同时移动他们,这通常意味着“放大",而以一根手指为支点转动另一根手指意味着"旋转".并且因为用户直接在应用程序窗口中进行这些手势,所以每个手势自然会被连接到某个特定的对象.例如,简单的具有多点触控功能的应用程序,可能会在虚拟桌

Android笔记:触摸事件的分析与总结----多点触控

一.多点触控 当多点同时触摸屏幕时,系统将会产生如下的触摸事件: 1.ACTION_DOWN:触摸屏幕的第一个点.此时手势开始.该点的数据通常在MotionEvent事件队列索引位置0处. 2.ACTION_POINTER_DOWN:除了第一个点的其他触摸点数据.该点的数据的索引位置由getActionIndex()方法返回. 3.ACTION_MOVE:在手势过程中发生的一次变化. 4.ACTION_POINTER_UP:当不是第一个点的其他点UP后触发. 5.ACTION_UP:当手势中的最

微信小程序~触摸相关事件(拖拽操作、手势识别、多点触控)

touchstart     手指触摸动作开始 touchmove    手指触摸后移动 touchcancel  手指触摸动作被打断,如来电提醒,弹窗 touchend      手指触摸动作结束 拖拽操作案例1: 注意按钮拖出屏幕边缘处理 <view id="id" bindtouchmove="handletouchmove" class='demo' style='top:{{ballTop}}px; left: {{ballLeft}}px'>

Android多点触控技术实战,自由地对图片进行缩放和移动

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11100327 在上一篇文章中我带着大家一起实现了Android瀑布流照片墙的效果,虽然这种效果很炫很酷,但其实还只能算是一个半成品,因为照片墙中所有的图片都是只能看不能点的.因此本篇文章中,我们就来对这一功能进行完善,加入点击图片就能浏览大图的功能,并且在浏览大图的时候还可以通过多点触控的方式对图片进行缩放. 如果你还没有看过 Android瀑布流照片墙实现,体验不规则排列的美感

android 多点触控

多点触控 1.多点触控从字面意思讲就是你用大于等于2根的手指触摸子啊手机屏幕上. Android中监听触摸事件是onTouchEvent方法,它的参数为MotionEvent,下面列举MotionEvent的一些常用的方法: getPointerCount() 获得触屏的点数. getPointerId(int pointerIndex) 返回一个触摸点的标示,pointIndex是你第几个触控点的索引 getX() 获得触屏的X坐标值 getY() 获得触屏的Y坐标值 getAction()

Android实现图片多点触控自由伸缩

简介 作为Android开发者,我们经常需要自定义控件,比如下面我们说的实现图片的多点触控和伸缩释放,这也是由于用户已经有这样的常识了,那就是看见有图片的地方就可以点击查看大图,并且可以通过手指对图片进行伸缩和移动,如果应用没有实现这一点,那么对用户来说将会是很糟糕的体验,用户很"愤怒".所以作为Android开发者,我们的任务就是让用户"爽".哈哈哈....下面我们将通过自定义ImageView实现以上功能. 涉及技术 一.Matrix(矩阵),Android是通

微信小程序之触控事件(四)

>>>什么是事件 事件是视图层到逻辑层的通讯方式. 事件可以将用户的行为反馈到逻辑层进行处理. 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数. 事件对象可以携带额外信息,如id, dataset, touches. >>>事件分类 touchstart 手指触摸 touchmove 手指触摸后移动 touchcancel 手指触摸动作被打断,如弹窗和来电提醒 touchend 手指触摸动作结束 tap 手指触摸后离开 longtap 手指触摸