android 键按下后不松开,怎么监听该过程,

KEYCODE_DPAD系列的键按下后,希望能够移动物体,当键松开后才停止,该如何做?我查了文档,只有OnKeyUp/Down,也就是按下的事件和松开的事件,但是当按下后... KEYCODE_DPAD系列的键按下后,希望能够移动物体,当键松开后才停止,该如何做?
我查了文档,只有OnKeyUp/Down,也就是按下的事件和松开的事件,但是当按下后到松开这么一段时间如何监听呢?
按下向左向右上下键能够移动飞机,然后松开才停止移动。
大家很热情,在这里谢谢了,我发现只要按下了某个键 不松开,它就可以达到我的目的(晕倒了,我以前一位不能达到,所以没试验就问问题。呵呵。事件监听是循环的,类似于win32中的消息循环)。不过还是谢谢大家。
展开
 我来答
logic1965
推荐于2017-09-29 · TA获得超过551个赞
知道小有建树答主
回答量:282
采纳率:0%
帮助的人:210万
展开全部
  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回调方法,用来处理屏幕事件的监听方法,在方法中得到按钮的引用,然后设置按钮的坐标。
素蓝
2011-05-24 · TA获得超过560个赞
知道小有建树答主
回答量:465
采纳率:0%
帮助的人:323万
展开全部
思路歪掉了,你想想按下时怎样控制飞机移动的,当然是控制传递坐标,那么松开后坐标不变就OK了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式