Android onTouchEvent()
上一章节中我们学习了 基于回调 的事件处理机制,本章节我们用一个范例来巩固下知识,顺便学习下 onTouchEvent()
onTouchEvent()
也是基于事件回调的
onTouchEvent()
同样是触碰事件,onTouchEvent()
与 TouchListener
不同的是,前者基于回调,后者基于事件,前者更多的是用于自定义的 view
所有的 View 类中都重写了 onTouchEvent()
方法,如果我们返回的值是 false
的话,那么事件会继续向外传播,由外面的容器或者 Activity
进行处理
范例
我们写一个范例,自定义一个 view,绘制一个蓝色的小圆,可以跟随手指进行移动
-
创建一个 空的 Android 项目
cn.twle.android.OnTouchEvent
-
在
MainActivity.java
目录下创建一个新的 ViewMsView.java
package cn.twle.android.ontouchevent; import android.util.AttributeSet; import android.content.Context; import android.view.View; import android.view.MotionEvent; import android.graphics.Paint; import android.graphics.Canvas; import android.graphics.Color; public class MsView extends View { public float X = 50; public float Y = 50; //创建画笔 Paint paint = new Paint(); public MsView(Context context,AttributeSet set) { super(context,set); } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); paint.setColor(Color.BLUE); canvas.drawCircle(X,Y,30,paint); } @Override public boolean onTouchEvent(MotionEvent event) { this.X = event.getX(); this.Y = event.getY(); //通知组件进行重绘 this.invalidate(); return true; } }
-
然后修改
activity_main.xml
添加我们刚刚自定义的MsView
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <cn.twle.android.ontouchevent.MsView android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
运行后就可以使用手指触摸进行移动