Android开发在使用ontouchlistener时如何设置按键在固定区域内响应?

比如说手指移到按键外部后,up事件不再响应... 比如说手指移到按键外部后,up事件不再响应 展开
 我来答
撕烂你的贝塔cx
2016-03-21 · TA获得超过3943个赞
知道大有可为答主
回答量:2061
采纳率:70%
帮助的人:1270万
展开全部
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;
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式