当前位置:文档之家› Android_OnTouchListener触屏事件接口-亲测可用

Android_OnTouchListener触屏事件接口-亲测可用

Android OnTouchListener触屏事件接口在修改后的工厂测试程序中,用到了关于触摸事件的获取,顺便学习关于触摸事件和触摸位置的知识,其方法如下:public boolean onTouchEvent(MotionEvent event) {//获得触摸的坐标float x = event.getX();float y = event.getY(); switch (event.getAction()){//触摸屏幕时刻case MotionEvent.ACTION_DOWN:break;//触摸并移动时刻case MotionEvent.ACTION_MOVE:break;//终止触摸时刻case MotionEvent.ACTION_UP:break;}return true;}关于public boolean onTouchEvent (MotionEvent event)方法:参数event:参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置、触摸的类型以及触摸的时间等。

该对象会在用户触摸手机屏幕时被创建。

返回值:该方法的返回值机理与键盘响应事件的相同,同样是当已经完整地处理了该事件且不希望其他回调方法再次处理时返回true,否则返回false。

该方法并不像之前介绍过的方法只处理一种事件,一般情况下以下三种情况的事件全部由onTouchEvent方法处理,只是三种情况中的动作值不同。

屏幕被按下:当屏幕被按下时,会自动调用该方法来处理事件,此时MotionEvent.getAction()的值为MotionEvent.ACTION_DOWN,如果在应用程序中需要处理屏幕被按下的事件,只需重新该回调方法,然后在方法中进行动作的判断即可。

屏幕被抬起:当触控笔离开屏幕时触发的事件,该事件同样需要onTouchEvent方法来捕捉,然后在方法中进行动作判断。

当MotionEvent.getAction()的值为MotionEvent.ACTION_UP 时,表示是屏幕被抬起的事件。

在屏幕中拖动:该方法还负责处理触控笔在屏幕上滑动的事件,同样是调用MotionEvent.getAction()方法来判断动作值是否为MotionEvent.ACTION_MOVE再进行处理。

OnTouchListener接口是用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。

该接口中的监听方法签名如下。

Java代码:public boolean onTouch(View v, MotionEvent event)参数v:参数v同样为事件源对象。

参数event:参数event为事件封装类的对象,其中封装了触发事件的详细信息,同样包括事件的类型、触发时间等信息。

节中介绍了一个在屏幕中拖动矩形移动的案例,本节将继续采用该案例的思路,通过监听接口的方式实现在屏幕上拖动按钮移动的案例。

开发步骤如下。

创建一个名为Sample的Android项目。

准备字符串资源,打开strings.xml文件,用下列代码替换原有代码。

Java代码:<?xml version="1.0" encoding="utf-8"?><!-- XML的版本及编码方式--><resources><string name="hello">Hello World, Sample</string><!--定义hello字符串--><string name="app_name">Sample</string><!--定义app_name字符串--><string name="location">位置</string><!--定义location字符串--></resources>说明:与前面介绍的案例相同,对程序中用到的字符串资源进行定义。

开发布局文件。

打开res/layout目录下的main.xml,用下列代码替换其原有代码。

Java代码:<?xml version="1.0" encoding="utf-8"?><!-- XML的版本及编码方式--><AbsoluteLayoutandroid:id="@+id/AbsoluteLayout01"android:layout_width="fill_parent"android:layout_height="fill_parent"xmlns:android="/apk/res/android"><!-- XML的版本及编码方式--><Buttonandroid:layout_y="123dip"android:layout_x="106dip"android:text="@string/location"android:layout_height="wrap_content"android:id="@+id/Button01"android:layout_width="wrap_content"/><!-- XML的版本及编码方式--></AbsoluteLayout>说明:该布局文件非常简单,只是在一个绝对布局中添加一个按钮控件即可,需要注意的是应该为该按钮指定ID,以便在Java代码中可以得到该按钮的引用。

接下来开始开发主要的逻辑代码。

编写Sample.java文件,其代码如下所示。

Java代码:package wyf.ytl;//声明所在包import android.app.Activity;//引入相关类//该处省略了部分类的引入代码,读者可以自行查阅随书光盘中的源代码\import android.widget.Button;//引入相关类public class Sample extends Activity {final static int WRAP_CONTENT=-2;//表示WRAP_CONTENT的常量final static int X_MODIFY=4;//在非全屏模式下X坐标的修正值final static int Y_MODIFY=52;//在非全屏模式下Y坐标的修正值int xSpan;//在触控笔点击按钮的情况下相对于按钮自己坐标系的int ySpan;//X,Y位置public void onCreate(Bundle savedInstanceState) {//重写的onCreate方法super.onCreate(savedInstanceState);setContentView(yout.main);//设置当前的用户界面Button bok=(Button)this.findViewById(R.id.Button01);//得到按钮的引用bok.setOnTouchListener(//添加监听new OnTouchListener(){//创建监听类public boolean onTouch(View view, MotionEventevent) {//重写的监听方法switch(event.getAction()){//监听事件case MotionEvent.ACTION_DOWN://触控笔按下xSpan=(int)event.getX();//得到X坐标ySpan=(int)event.getY();//得到Y坐标break;case MotionEvent.ACTION_MOVE://触控笔移动Button bok=(Button)findViewById(R.id.Button01);//让按钮随着触控笔的移动一起移动youtParams lp= new youtParams( WRAP_CONTENT, WRAP_CONTENT,(int)event.getRawX()-xSpan-X_MODIFY,(int)event.getRawY()-ySpan-Y_MODIFY ) ;bok.setLayoutParams(lp);//设置按钮的坐标break;}return true;}});}public boolean onKeyDown (int keyCode, KeyEvent event){//键盘键按下的方法Button bok=(Button)this.findViewById(R.id.Button01);//得到按钮的引用bok.setText(keyCode+" Down");//设置按钮的文字return true;}public boolean onKeyUp (int keyCode,KeyEvent event){//键盘键抬起的方法Button bok=(Button)this.findViewById(R.id.Button01);//得到按钮的引用bok.setText(keyCode+" Up");//设置按钮的文字return true;}public boolean onTouchEvent (MotionEventevent){//让按钮随触控笔的移动一起移动Button bok=(Button)this.findViewById(R.id.Button01);//得到按钮引用youtParams lp=new youtParams(//创建LayoutParams WRAP_CONTENT, WRAP_CONTENT, (int)event.getRawX()-xSpan-X_MODIFY,//X坐标(int)event.getRawY()-ySpan-Y_MODIFY//Y坐标) ;bok.setLayoutParams(lp);return true;}}第6~10行声明了程序中需要的一些变量。

第11~40行重写了Activity中的onCreate方法,在方法中设置当前的用户界面,然后得到按钮的引用并为其注册监听。

第16~38行创建监听器类并重写onTouch方法,然后根据事件的类型执行不同的操作。

相关主题