我们知道,在每一个View里有一个onTouchEvent的方法可以重写,这个方法的作用就是能够监控你的手在屏幕上按下、移动、抬起的动作。
这个方法提供了一个参数,就是一个MotionEvent对象,我们获取到event对象以后,就要对其行为进行判断,一般使用switch如下:
public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_UP: break; } return true; }
今天我们介绍的主要是两种操作:五子棋盘的移动和放大缩小。
那么首先我们要画一个五子棋,在View的onDraw方法里,我们直接画线条,这里我们就不多说了:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 画棋盘 paint.setColor(Color.BLACK); for (int i = 0; i < GobangConfig.num; i++) { canvas.drawLine(GobangConfig.X, GobangConfig.Y + i * GobangConfig.size, GobangConfig.X + (GobangConfig.num - 1) * GobangConfig.size, GobangConfig.Y + i * GobangConfig.size, paint); canvas.drawLine( GobangConfig.X + i * GobangConfig.size, GobangConfig.Y, GobangConfig.X + i * GobangConfig.size, GobangConfig.Y + (GobangConfig.num - 1) * GobangConfig.size, paint); } }
我们今天要做的有两件事情:
1、棋盘的移动
棋盘的移动我们要用到MotionEvent里的两个常量:ACtION_DOWN和ACTION_MOVE
private float x1, y1, x2, y2;
x1,y1为手指刚刚触摸到屏幕的坐标。
x2,y2为手指移动后的坐标。
于是我们利用这两个MotionEvent事件和坐标来写棋盘的移动:
case MotionEvent.ACTION_DOWN: //获取触碰的坐标 x1 = event.getX(); y1 = event.getY(); break; case MotionEvent.ACTION_MOVE: //获取移动后的坐标 x2 = event.getX(); y2 = event.getY(); //改变棋盘的位置 GobangConfig.X += (x2 - x1); GobangConfig.Y += (y2 - y1); //将新坐标赋给原来触碰的坐标 x1 = x2; y1 = y2; break;
这样就实现了棋盘的移动,然后我们要做的是:
2、棋盘的放大和缩小
我们这里演示的放大和缩小是按照固定比例的,有兴趣的可以根据你两个手指所拉伸的长度来进行放大和缩小。
思路是这样的,我们先在屏幕上按住一个手指,那么,当我们按下第二个手指时,会有一个初始距离,然后我们移动第二个手指并松开,在松开瞬间得到两个手指的新距离,比较初始距离和新距离,来确定是放大还是缩小。
首先定义一个量来储存初始距离:
private float oldPath;
使用switch (event.getAction() & MotionEvent.ACTION_MASK)就可以处理处理多点触摸的ACTION_POINTER_DOWN和ACTION_POINTER_UP事件。
然后我们就可以根据MotionEvent的事件来进行相应的操作:
case MotionEvent.ACTION_POINTER_DOWN: float mx = event.getX(1);//参数1代表是第二个手指 float my = event.getY(1); oldPath = (float) Math.sqrt((mx - x1) * (mx - x1) + (my - y1) * (my - y1));// 得到初始距离 break; case MotionEvent.ACTION_POINTER_UP: x = event.getX(0);// 参数0代表第一个按下的手指 y = event.getY(0); mx = event.getX(1);//参数1代表第二个按下的手指 my = event.getY(1); float newPath = (float) Math.sqrt((mx - x1) * (mx - x1) + (my - y1) * (my - y1));// 计算得到新距离 if (oldPath < newPath)// 判断新距离和旧距离 GobangConfig.size = (int) (GobangConfig.size * 1.1);// 放大棋盘 else if (GobangConfig.size > 15)// 棋盘不能过小,否则就无法放大 GobangConfig.size = (int) (GobangConfig.size * 0.9);// 所小棋盘 break;
注意,在这个switch选择以后,一定要加一个:
this.invalidate();// 刷新界面
这样就可以实现我们所需要的效果啦,大家如果还有好的想法可以多交流哦!
相关推荐
这个压缩包文件`android_view_MotionEvent.rar_float`的焦点在于`float`类型的数据,这通常涉及到Android中的坐标和压力等触摸事件的参数。在Android应用开发中,理解和掌握`MotionEvent`的用法对于创建与用户交互的...
通过阅读和理解这部分代码,开发者可以学习到如何在Android中实现图片的移动和放缩,以及如何结合手势识别进行交互设计。对于初学者,这是一个很好的实践案例,有助于提升对Android图形和触摸事件处理的理解。
ndroid中的MotionEvent 及其它事件处理
Android MotionEvent中getX()与getRawX()都是获取屏幕坐标(横),但二者又有区别 getX() : 是获取相对当前控件(View)的坐标 getRawX() : 是获取相对显示屏幕左上角的坐标
Android 触屏事件和 MotionEvent 详解 Android 触屏事件是指用户在设备屏幕上的所有操作,包括手指按到屏幕上、手指在屏幕上移动和手指离开屏幕等。触屏事件是 Android 设备交互的主要媒介,屏幕分为触屏和非触屏两...
Android系统提供了一套GestureDetector类,用于识别常见的触摸手势,如单击、双击、滑动和缩放。对于图片的缩放,主要涉及到ScaleGestureDetector,它是专门用于识别pinch-to-zoom(捏合缩放)手势的工具类。 1. **...
总之,MotionEvent和OnTouchListener是Android触摸事件处理的基础,它们使得开发者能够构建出响应用户各种手势的交互式应用。了解并熟练运用这两个组件,对于提升Android应用的用户体验至关重要。在实际项目中,你...
当用户触摸屏幕时,Android会生成一个MotionEvent序列,这个序列包含了触摸事件的开始、移动、结束等状态。默认情况下,触摸事件会直接传递给被点击的子View。但是,有时候我们可能希望父View能捕获这些事件,例如在...
首先,我们需要理解Android的UI体系,它基于View和 ViewGroup。在我们的案例中,飞机可以被设计为一个自定义的View类,例如`PlaneView`,继承自`View`。在这个自定义类中,我们可以绘制飞机的图像,并设置其初始位置...
在Android开发中,自定义View是一项非常重要的技能,它允许开发者根据自己的需求...自定义View的学习是一个不断实践和优化的过程,通过这样的项目,你可以深入理解Android图形绘制和事件处理机制,提升你的开发能力。
总的来说,"Android 矩形在屏幕内的上下左右移动"这个项目涵盖了Android基础的视图系统、绘图API、事件处理和自定义View等重要知识点,是学习Android开发的好起点。通过这个项目,开发者可以深入理解Android应用如何...
通过这个DEMO,开发者可以学习到如何在Android平台上实现高效的图像交互功能,为用户带来更加直观和丰富的体验。无论是开发图片查看器、地图应用,还是其他需要多点触控操作的场景,这些知识都极具价值。
总之,MotionEvent是Android开发中的重要工具,它允许开发者捕获和处理用户的触摸输入,实现各种交互效果。通过实践和学习MotionEventDemo,开发者可以提升自己在处理用户手势方面的技能,从而创建出更加用户友好的...
Android的`MotionEvent`类提供了触摸事件的相关信息,如ACTION_DOWN(手指按下)、ACTION_MOVE(手指移动)和ACTION_UP(手指抬起)。在`View`的`onTouchEvent()`方法中,开发者可以监听这些事件,根据用户的触摸...
这个"android view随手指移动"的实现涉及到Android的触摸事件处理和视图动画技术。接下来,我们将深入探讨如何在Android中实现这一功能。 首先,我们需要了解Android中的触摸事件处理机制。在Android中,触摸事件...
在Android开发中,物体移动是实现游戏或动态应用的核心功能之一。这个"android 物体移动demo"提供了关于如何在Android平台上...通过学习和实践这个demo,开发者可以更好地理解和掌握Android平台上实现物体移动的技巧。
Android通过`MotionEvent`类来处理用户的触摸操作,包括ACTION_DOWN(手指按下)、ACTION_MOVE(手指移动)和ACTION_UP(手指抬起)等动作。开发者可以在Activity或View中重写`onTouchEvent`方法来监听这些事件。 1...
总之,通过结合RecyclerView、ItemTouchHelper和自定义Adapter,我们可以轻松实现Android应用中的可拖拽移动列表。这个功能增强了用户的交互体验,使得数据排序变得更加直观和便捷。在实际开发中,根据项目需求,你...
在Android开发中,创建一个能够跟随手指移动的小球是一个经典的交互式UI设计示例,它可以帮助初学者理解触摸事件处理、绘图以及Android图形系统的基本原理。以下将详细阐述实现这个功能所需的知识点: 1. **Android...