Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 516|回复: 0

开发交流:Android OnTouchListener接口

[复制链接]

该用户从未签到

发表于 2011-10-24 09:38:21 | 显示全部楼层 |阅读模式
  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回调方法,用来处理屏幕事件的监听方法,在方法中得到按钮的引用,然后设置按钮的坐标。

       运行该案例,通过触控笔便可拖动屏幕中的按钮移动,如图所示。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 23:20 , Processed in 0.354296 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表