Android平台View的按键事件KeyDown和onTounchEvent事件的返回值问题用法

注释一个好的文章,http://jessical08.iteye.com/blog/858772

这两个事件的返回值机值是一样的,同样是当已经完整地处理了该事件且不希望其他回调方法的再次处理时返回true,否则返回false,

返回值,该方法的返回值为一个boolean类型的变量,当返回true时,表示已经完整地处理了这个事件,并不希望其他的回调方法再次进行处理,而当返回false时,表示并没有完全处理完该事件,更希望其他回调方法继续对其进行处理,例如Activity中的回调方法。

  • 8   public class Sample_7_1 extends Activity {  
  • 9       public final String TAG = "Sample_7_1";    /字符常量  
  • 10      MyButton myButton;                        //自定义的Button  
  • 11      public void onCreate(Bundle savedInstanceState) {   //重写的onCreate方法  
  • 12              super.onCreate(savedInstanceState);  
  • 13              myButton = new MyButton(this);    //创建一个自定义的Button  
  • 14              myButton.setText("全屏按钮");        //设置按钮上的文字  
  • 15          myButton.setTextSize(30);               //设置文字的大小  
  • 16              setContentView(myButton);           //将按钮显示出来  
  • 17          }  
  • 18      public boolean onKeyDown(int keyCode, KeyEvent event) { //重写的键盘按下监听  
  • 19          Log.d(TAG, "activity onKeyDown");          //打印日志  
  • 20          return super.onKeyDown(keyCode, event);  
  • 21      }  
  • 22          class MyButton extends Button{            //自己定义的Button  
  • 23          public MyButton(Context context) {      //构造器  
  • 24              super(context);  
  • 25          }  
  • 26          public boolean onKeyDown(int keyCode, KeyEvent event){//重写的键盘按下监听  
  • 27              Log.d(TAG, "MyView onKeyDown");     //打印日志  
  • 28              return false;  
  • 29          }  
  • 20      }  
  • 31  }

当按钮控件获得焦点时单击手机键盘上的任意键,通过LogCat中看到的日志内容可知,此时先调用自定义的Button中的onKeyDown方法,再调用Activity中的onKeyDown方法,而当按钮控件没有获得焦点时,将只调用Activity中的onKeyDown方法,如图7-2所示。

如果将代码的第28行的false改成true再次运行,当按钮获得焦点时点击按键,只会调用自定义的Button中的onKeyDown方法,而不会再调用Activity中的该方法。



public boolean onKeyDown(int keyCode, KeyEvent msg) {

     if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
           // 按下中键时触发的事件,这里android123.com.cn提醒网友G1或ADP1使用的是轨迹球,这个Trackball仍然可以按下的,不仅仅是方向的导航。
             return (true);
     }
        if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
         //向左
            return (true);
        }
        if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
         //向右
            return (true);
        }
        if(keyCode == KeyEvent.KEYCODE_DPAD_UP){
         //向上
            return (true);
        }
        if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){
         //向下
            return (true);
        }
        return super.onKeyDown(keyCode, msg);

    }




    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode==KeyEvent.KEYCODE_SEARCH){//搜索
            Intent intent = new Intent(BaseActivity.this,SearchActivity.class);
            intent.putExtra("isShowQuitHints", false);
            startActivity(intent);
            return true;
        }else {        
            return super.onKeyDown(keyCode, event);
        }
    }




1 @Override
 2     public boolean onKeyDown(int keyCode, KeyEvent event) {
 3         // TODO Auto-generated method stub
 4         
 5         if(keyCode==KeyEvent.KEYCODE_BACK){
 6             //弹出确定退出对话框
 7             new AlertDialog.Builder(this)
 8             .setTitle("退出")
 9             .setMessage("确定退出吗?")
10             .setPositiveButton("确定", new DialogInterface.OnClickListener() {
11                 
12                 @Override
13                 public void onClick(DialogInterface dialog, int which) {
14                     // TODO Auto-generated method stub
15                     Intent exit = new Intent(Intent.ACTION_MAIN);
16                     exit.addCategory(Intent.CATEGORY_HOME);
17                     exit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
18                     startActivity(exit);
19                     System.exit(0);
20                 }
21             })
22             .setNegativeButton("取消", new DialogInterface.OnClickListener() {
23                 
24                 @Override
25                 public void onClick(DialogInterface dialog, int which) {
26                     // TODO Auto-generated method stub
27                     dialog.cancel();
28                 }
29             })
30             .show();
31             //这里不需要执行父类的点击事件,所以直接return
32             return true;
33         }
34         //继续执行父类的其他点击事件
35         return super.onKeyDown(keyCode, event);
36     }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        final int y = (int) event.getY();
        mBounceHack = false;

        switch (event.getAction()) {
            case MotionEvent.ACTION_UP :
                if (!isVerticalScrollBarEnabled()) {
                    setVerticalScrollBarEnabled(true);
                }
                if (getFirstVisiblePosition() == 0
                        && mRefreshState != REFRESHING) {
                    if ((mRefreshView.getBottom() >= mRefreshViewHeight || mRefreshView
                            .getTop() >= 0)
                            && mRefreshState == RELEASE_TO_REFRESH) {
                        mRefreshState = REFRESHING;
                        prepareForRefresh();// 准备刷新
                        onRefresh();// 刷新
                    } else if (mRefreshView.getBottom() < mRefreshViewHeight
                            || mRefreshView.getTop() <= 0) {
                        resetHeader();// 中止刷新
                        setSelection(1);
                    }
                }
                break;
            case MotionEvent.ACTION_DOWN :
                mLastMotionY = y;// 获得按下y轴位置
                break;
            case MotionEvent.ACTION_MOVE :
                // 计算边距
                applyHeaderPadding(event);
                break;
        }
        return super.onTouchEvent(event);
    }

  1.     @Override  
  2.     public boolean onTouchEvent(MotionEvent event) {  
  3.         int key = event.getAction();  
  4.         switch (key) {  
  5.             case MotionEvent.ACTION_UP:  
  6.                 result = false;  
  7.                 break;  
  8.       
  9.             case MotionEvent.ACTION_DOWN:  
  10.                 result = true;  
  11.                 break;  
  12.             case MotionEvent.ACTION_CANCEL:  
  13.                 result = true;  
  14.                 break;  
  15.       
  16.             case MotionEvent.ACTION_MOVE:  
  17.                   
  18.                 if (i > 0) {  
  19.                     result = false;  
  20.                 }  
  21.                 i++;  
  22.                 break;  
  23.             default :  
  24.                 result = true;  
  25.                 break;  
  26.         }  
  27.         System.out.println("surface  touch: " + result);  
  28.         return result;  
  29.     } 
    1.     /**按键按下触发的事件*/  
    2.     public boolean onKeyDown(int keyCode, KeyEvent event)  
    3.     {  
    4.         switch(keyCode)  
    5.         {  
    6.         case KeyEvent.KEYCODE_DPAD_CENTER:  
    7.             ShowMessage("按下:中键");break;  
    8.         case KeyEvent.KEYCODE_DPAD_UP:  
    9.             ShowMessage("按下:上方向键");break;  
    10.         case KeyEvent.KEYCODE_DPAD_DOWN:  
    11.             ShowMessage("按下:下方向键");break;  
    12.         case KeyEvent.KEYCODE_DPAD_LEFT:  
    13.             ShowMessage("按下:左方向键");break;  
    14.         case KeyEvent.KEYCODE_DPAD_RIGHT:  
    15.             ShowMessage("按下:右方向键");break;  
    16.         }  
    17.         return super.onKeyDown(keyCode, event);  
    18.     }  
    19.       
    20.     /**按键弹起所触发的事件*/  
    21.     public boolean onKeyUp(int keyCode, KeyEvent event)  
    22.     {  
    23.         switch(keyCode)  
    24.         {  
    25.         case KeyEvent.KEYCODE_DPAD_CENTER:  
    26.             ShowMessage("弹起:中键");  
    27.             break;  
    28.         case KeyEvent.KEYCODE_DPAD_DOWN:  
    29.             ShowMessage("弹起:下方向键");  
    30.             break;  
    31.         case KeyEvent.KEYCODE_DPAD_UP:  
    32.             ShowMessage("弹起:上方向键");  
    33.             break;  
    34.         case KeyEvent.KEYCODE_DPAD_LEFT:  
    35.             ShowMessage("弹起:左方向键");  
    36.             break;  
    37.         case KeyEvent.KEYCODE_DPAD_RIGHT:  
    38.             ShowMessage("弹起:右方向键");  
    39.             break;  
    40.         }  
    41.         return super.onKeyUp(keyCode, event);  
    42.     }
  1.       
  2.    /**按键重复点击事件*/  
  3.     public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)  
  4.     {  
  5.         return onKeyMultiple(keyCode, repeatCount, event);  
  6.     }  
  7.       
  8.     /**触屏事件*/  
  9.     public boolean onTouchEvent(MotionEvent event)  
  10.     {  
  11.         int action = event.getAction();  
  12.         if(action ==  MotionEvent.ACTION_CANCEL||action == MotionEvent.ACTION_DOWN||action == MotionEvent.ACTION_MOVE)  
  13.         {  
  14.             return false;  
  15.         }  
  16.         //得到触点的位置  
  17.         String x = String.valueOf(event.getX());  
  18.         String y = String.valueOf(event.getX());  
  19.           
  20.         ShowMessage("触点坐标:(" + x + "," + y +")");  
  21.         return super.onTouchEvent(event);  
  22.     } 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值