Android OnTouchListener触屏事件接口

    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的版本及编码方式 -->
<AbsoluteLayout
android:id="@+id/AbsoluteLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">

<!-- XML的版本及编码方式 -->
<Button
android: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(R.layout.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);
//让按钮随着触控笔的移动一起移动
ViewGroup.LayoutParams lp= new AbsoluteLayout.LayoutParams( 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);
//得到按钮引用
ViewGroup.LayoutParams lp=
new AbsoluteLayout.LayoutParams(
//创建
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方法,然后根据事件的类型执行不同的操作。
       第41~45行重写了onKeyDown回调方法,在该方法中得到按钮的引用并设置按钮上的文字,第46~50行重写了onKeyUp回调方法,同样也是设置按钮上的文字。
       第51~61行重写了onTouchEvent回调方法,用来处理屏幕事件的监听方法,在方法中得到按钮的引用,然后设置按钮的坐标。

时间: 2024-09-20 14:22:27

Android OnTouchListener触屏事件接口的相关文章

android detect 触屏事件

问题描述 android detect 触屏事件 我创建了一个简单的游戏.当用户触屏时,会增加一些变量.否则就不会.我在 TouchEvent 上使用 surfaceView,但是不能运行,因为它只被调用一次.如何实现这个功能? @Override public boolean onTouchEvent(MotionEvent event) { vehicle.vel_y -=0.2f; return super.onTouchEvent(event); } 解决方案 用GestureDetec

Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化

  关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记! 原文地址:http://blog.csdn.net/xiaominghimi/archive/2011/01/10/6127578.aspx 先上一段代码大家来看一下: view plaincopy to clipboardprint? ·········10········20········30········40········50········60········70········80····

【ANDROID游戏开发十五】关于ANDROID 游戏开发中 ONTOUCHEVENT() 触屏事件的性能优化笔记!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/336.html ----------------------- 『很多童鞋说我的代码运行后,点击home或者back后会程序异常,如果你也这样遇到过,那么你肯定没有仔细读完Himi的博文,第十九篇Himi专门写了关于这些错误的原因和解决方法,这里我在博客都补充说明下,省的童鞋们总疑惑这一块:请点击下面联系进入阅读:

js实现滑动触屏事件监听的方法

  这篇文章主要介绍了js实现滑动触屏事件监听的方法,适用于手机端触屏滑动事件的监听技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了js实现滑动触屏事件监听的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 function span_move_fun(){

【IOS-COCOS2D-X 游戏开发之十】自定义CCSPRITE/LAYER/CCNODE及静态类模版&amp;自定义类细节说明&amp;COCOS2DX触屏事件讲解

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/699.html 这里Himi又来了一篇基础篇-..不是因为充博文数量,而是Cocos2dX一个超级群里不少童鞋都有问过很基础的问题,Himi估计这些童鞋要么之前对C++不熟悉,要么就是之前没有接触过Cocos2d,而直接转入了Cocos2dx的开发行列中仂,这里首先给这些童鞋三个建议: 1. Cocos2dx

js实现滑动触屏事件监听的方法_javascript技巧

本文实例讲述了js实现滑动触屏事件监听的方法.分享给大家供大家参考.具体实现方法如下: function span_move_fun(){ var span = document.getElementById("move_k"); var span_left = $(span).offset().left; var span_top = $(span).offset().top; var start_left = $(span).offset().left; var start_top

网页-html5+js手机触屏事件在一个固定的区域内实现div的移动

问题描述 html5+js手机触屏事件在一个固定的区域内实现div的移动 我想在手机网页上实现在一个固定的区域内有一个div这个div能够随着手指的滑动而改变位置,求各位大神指点迷津.. 解决方案 不知道怎么弄了,以前见别人搞过 解决方案二: .............................................好吧 解决方案三: 貌似不是用div吧是用一个浮动窗口然后他的位置属性随手势改变 解决方案四: 这个可以利用touchstart,touchmove,touchend

ios触屏事件指南

  这篇文章主要给大家总结介绍了2种实现ios触屏事件的方法,简单实用,有需要的小伙伴可以参考下. 代码如下: //在一个函数里面(初始化等)里面添加要识别触摸事件的范围 infoView=[[UIView alloc] initWithFrame:CGRectMake(20, 100,220, 280)];//范围,出了这个范围就检测不到触摸了 infoView.backgroundColor=[UIColor blueColor]; infoView.alpha=0.6; [self.vie

C# winform win7 触屏事件的获取

问题描述 C# winform win7 触屏事件的获取 项目需要用触屏一体机开发winform程序,获取触屏事件,拖拽滑动等等,不知道如何下手啊. 解决方案 一般的触摸屏,你按照鼠标事件处理就好.比如触摸就是单击,拖拽就是鼠标按住和移动.这些都可以用mouse_move,mouse_up,mouse_down处理. 只有多点触摸有专门的处理,可以用apihttp://zwkufo.blog.163.com/blog/static/2588251201022411174782/