Android OnTouchListener触屏事件接口

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

Java代码:
public boolean onTouch(View v, MotionEvent event)
参数v:参数v同样为事件源对象。
参数event:参数event为事件封装类的对象,其中封装了触发事件的详细信息,同样包括事件的类型、触发时间等信息。

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

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

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

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回调方法,用来处理屏幕事件的监听方法,在方法中得到按钮的引用,然后设置按钮的坐标。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值