多点触控与单点触控

news/2024/11/17 22:45:10/
private ImageView mImageView;private Matrix matrix = new Matrix();private Matrix savedMatrix = new Matrix();private static final int NONE = 0;private static final 	int DRAG = 1;private static final int ZOOM = 2;private int mode = NONE;// 第一个按下的手指的点private PointF startPoint = new PointF();// 两个按下的手指的触摸点的中点private PointF midPoint = new PointF();// 初始的两个手指按下的触摸点的距离private float oriDis = 1f;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(R.layout.activity_main);mImageView = (ImageView) this.findViewById(R.id.imageView);mImageView.setOnTouchListener(this);}@Overridepublic boolean onTouch(View v, MotionEvent event) {ImageView view = (ImageView) v;// 进行与操作是为了判断多点触摸switch (event.getAction() & MotionEvent.ACTION_MASK) {case MotionEvent.ACTION_DOWN:// 第一个手指按下事件matrix.set(view.getImageMatrix());savedMatrix.set(matrix);startPoint.set(event.getX(), event.getY());mode = DRAG;break;case MotionEvent.ACTION_POINTER_DOWN:// 第二个手指按下事件oriDis = distance(event);if (oriDis > 10f) {savedMatrix.set(matrix);midPoint = middle(event);mode = ZOOM;}break;case MotionEvent.ACTION_POINTER_UP:// 手指放开事件mode = NONE;break;case MotionEvent.ACTION_MOVE:// 手指滑动事件if (mode == DRAG) {// 是一个手指拖动matrix.set(savedMatrix);matrix.postTranslate(event.getX() - startPoint.x, event.getY()- startPoint.y);} else if (mode == ZOOM) {// 两个手指滑动float newDist = distance(event);if (newDist > 10f) {matrix.set(savedMatrix);float scale = newDist / oriDis;matrix.postScale(scale, scale, midPoint.x, midPoint.y);}}break;}// 设置ImageView的Matrixview.setImageMatrix(matrix);return true;}// 计算两个触摸点之间的距离private float distance(MotionEvent event) {float x = event.getX(0) - event.getX(1);float y = event.getY(0) - event.getY(1);return FloatMath.sqrt(x * x + y * y);}// 计算两个触摸点的中点private PointF middle(MotionEvent event) {float x = event.getX(0) + event.getX(1);float y = event.getY(0) + event.getY(1);return new PointF(x / 2, y / 2);}

 


http://www.ppmy.cn/news/484973.html

相关文章

多点触摸处理

接着上文,我们做了一个简陋的下拉刷新控件,目前用到的知识点有 view的滑动view的弹性滑动事件分发机制事件分发机制的两个小问题(事件的二次分发) 目前这个控件除了简陋一点,没做抽象封装,在单手操作下&a…

多点触控 - MFC

概述 Windows 7 支持用户通过手指接触来管理应用程序,无需使用中间设备。这扩展了平板 PC 基于触笔的功能。与其他指针设备不同,这种新功能允许多个输入事件在不同指针位置同时发生,它还支持复杂的场景,比如通过十个手指或多个并…

多点触控

1.要了解多点触控,我们必须先了解一下View的生命周期,毕竟在Android用的到多点触控的地方,一般都是自定义控件。就像Fragment和Activity都有生命周期一样,View也有自己的生命周期。该生命周期并不直接和展示它的Fragment或者Activ…

多点触摸屏技术

多点触摸屏技术 2006年02月苹果申请了一些多点触摸屏的专利(multipoint),今天苹果公司提供了完整的iPod产品线,并且引入了带有触摸屏和多点触摸技术的iPod。参见:苹果将发布更便宜更创带无线的新iPod 一年前还感叹QQ的概念QQ版,…

android多点触控的理解

首先多点触控要使用event.getActionMasked()来获取事件,调用情况如下: case MotionEvent.ACTION_DOWN: //第一根手指按下触发,只会触发一次case MotionEvent.ACTION_MOVE: //所有手指的move事件都会触发这个事件case …

Android 多点触控

1.多点触控 多点触控 ( Multitouch,也称 Multi-touch ),即同时接受屏幕上多个点的人机交互操作,多点触控是从 Android 2.0 开始引入的功能,在 Android 2.2 时对这一部分进行了重新设计。 多点触控相关问题: 在引入多点…

android多点触控的使用

最近没什么事看了一下多点触控的例子,跟我开始想的实现方法一样,只是一些函数不知道:下面是常用的函数解释(copy过来滴....) event.getAction() //获取触控动作比如ACTION_DOWN event.getPointerCount(); //获取触控点的数量,比如…

单点触控和多点触控

Android 多点触控详解,在前面的几篇文章中我们大致了解了 Android 中的事件处理流程和一些简单的处理方案,本次带大家了解 Android 多点触控相关的一些知识。 多点触控 ( Multitouch,也称 Multi-touch ),即同时接受屏幕上多个点的…