`
nanjingjiangbiao_T
  • 浏览: 2739608 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Android--DPAD键的事件处理

 
阅读更多

什么是键?相信大家可能并不会陌生,它就是手机上的方向键,还有一个是中间键。

如下截图:

其中红色的标记就是DPAD键。


下面我们实现的这个例子是利用方向键操作按钮上下左右的移动,并利用中间键使得按钮恢复到屏幕的中间位置。

我们需要重载一个函数:

public boolean onKeyDown(int keyCode, KeyEvent event)
通过判断keyCode来做出相应的动作。

下面给出完整的代码:

public class EX05_20 extends Activity
{
  private Button mButton01;
  private int intWidth, intHeight, intButtonX, intButtonY;
  
  /* 保存屏幕的分辨率 */
  private int intScreenX, intScreenY;
  
  /* 按钮位移的平移量 */
  private int intShift = 5;
  
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    
    /* 取得屏幕解析像素 */
    intScreenX = dm.widthPixels;
    intScreenY = dm.heightPixels;
    
    /* 定义按钮的宽x高 */
    intWidth = 80;
    intHeight = 80;
    
    mButton01 =(Button) findViewById(R.id.myButton1);
    
    /* 初始化按钮位置置中 */
    RestoreButton();
    
    /* 当按下按钮,还原初始位置 */
    mButton01.setOnClickListener(new Button.OnClickListener()
    {
      @Override
      public void onClick(View v)
      {
        // TODO Auto-generated method stub
        RestoreButton();
      }
    });
  }
  
  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event)
  {
    // TODO Auto-generated method stub
    switch(keyCode)
    {
      /* 中间按键 */
      case KeyEvent.KEYCODE_DPAD_CENTER:
        /* keyCode=23 */
        RestoreButton();
        break;
      /* 上按键 */
      case KeyEvent.KEYCODE_DPAD_UP:
        /* keyCode=19 */
        MoveButtonUp();
        break;
      /* 下按键 */
      case KeyEvent.KEYCODE_DPAD_DOWN:
        /* keyCode=20 */
        MoveButtonDown();
        break;
      /* 左按键 */
      case KeyEvent.KEYCODE_DPAD_LEFT:
        /* keyCode=21 */
        MoveButtonLeft();
        break;
      /* 右按键 */
      case KeyEvent.KEYCODE_DPAD_RIGHT:
        /* keyCode=22 */
        MoveButtonRight();
        break;
    }
    return super.onKeyDown(keyCode, event);
  }
  
  /* 还原按钮位置的事件处理 */
  public void RestoreButton()
  {
    //标记按钮的位置在屏幕的中心
    intButtonX = ((intScreenX-intWidth)/2);
    intButtonY = ((intScreenY-intHeight)/2);
    mMakeTextToast("("+Integer.toString(intButtonX)+","+Integer.toString(intButtonY)+")",true);
    mButton01.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,intHeight,intButtonX,intButtonY));
  }
  
  /* 按下DPAD上按键时事件处理 */
  public void MoveButtonUp()
  {
    intButtonY = intButtonY-intShift;
    if(intButtonY<0)
    {
      intButtonY = 0;
    }
    mButton01.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,intHeight,intButtonX,intButtonY));
  }
  
  /* 按下DPAD下按键时事件处理 */
  public void MoveButtonDown()
  {
    intButtonY = intButtonY+intShift;
    if(intButtonY>(intScreenY-intHeight))
    {
      intButtonY = intScreenY-intHeight;
    }
    mButton01.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,intHeight,intButtonX,intButtonY));
  }
  
  /* 按下DPAD左按键时事件处理 */
  public void MoveButtonLeft()
  {
    intButtonX = intButtonX-intShift;
    if(intButtonX<0)
    {
      intButtonX = 0;
    }
    mButton01.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,intHeight,intButtonX,intButtonY));
  }
  
  /* 按下DPAD右按键时事件处理 */
  public void MoveButtonRight()
  {
    intButtonX = intButtonX+intShift;
    if(intButtonX>(intScreenX-intWidth))
    {
      intButtonX = intScreenX-intWidth;
    }
    mButton01.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,intHeight,intButtonX,intButtonY));
  }
  
  public void mMakeTextToast(String str, boolean isLong)
  {
    if(isLong==true)
    {
      Toast.makeText(EX05_20.this, str, Toast.LENGTH_LONG).show();
    }
    else
    {
      Toast.makeText(EX05_20.this, str, Toast.LENGTH_SHORT).show();
    }
  }
}




分享到:
评论

相关推荐

    android处理键盘事件之物理按键(屏蔽后退键)

    总结来说,Android开发者可以通过重写`onKeyDown`、`onKeyUp`和`onBackPressed`方法来处理物理按键事件,特别是屏蔽后退键。不过在屏蔽系统功能前,务必考虑用户体验,确保你的应用仍然保持易用性。同时,提供的文档...

    Android代码-TV端GridView焦点移动事件处理.rar

    本压缩包“Android代码-TV端GridView焦点移动事件处理.rar”提供了一种处理TV端GridView焦点移动事件的方法。 首先,我们需要理解在TV应用中,GridView的焦点移动与手机或平板上的操作有所不同。在TV上,用户通过...

    Android虚拟键码对照表

    理解虚拟键码对照表对于开发Android应用,尤其是处理键盘事件或者自定义输入控件时至关重要。 在Android的`KeyEvent`类中,定义了一系列的常量,代表不同的键码。这些键码不仅包括常见的字母、数字键,还涵盖了一...

    Android_按键的键值

    以上介绍了Android按键键值的一部分内容,包括常见的方向键、数字键、字母键以及特殊功能键。通过理解和使用这些键值、动作码和标记,开发者能够更灵活地处理用户的输入事件,从而提高应用程序的用户体验。在实际...

    Android系统添加全局快捷键的方法

    这意味着开发者可以通过这些枚举值来处理按键事件。 #### 三、Android系统全局快捷键的实现 全局快捷键的实现在Android中涉及多个层次的技术实现,包括但不限于底层的驱动程序、中间层的键值映射以及上层的应用...

    Android Event.doc

    在Android开发中,事件处理是构建用户界面的关键部分。Android事件主要分为两类:普通事件(如触摸屏事件)和按键事件。以下将详细介绍这两种事件及其处理机制。 1. 普通事件 普通事件通常指的是触摸屏上的点击、...

    android 循环gallery 选中放大 按键控制

    `Gallery`的XML属性包括`android:id`用于标识控件,`android:layout_width`和`android:layout_height`定义其尺寸,`android:spacing`设置项目之间的间隔,以及`android:fadingEdgeLength`定义边缘淡出长度,提高视觉...

    android keymaps

    本文档将深入探讨Android系统中的键映射(keymaps)和键盘输入处理机制,以及如何根据设备特定需求自定义键布局和字符映射。 1. 键盘输入的处理流程: - **中断或轮询程序**:Android使用标准的Linux输入事件设备...

    安卓TimePicker通过按键事件与其他控件进行焦点切换

    // 处理下键或回车键事件 // 调整焦点到下一个控件 } else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) { // 处理上键事件 // 调整焦点到上一个控件 } return super.onKeyDown(keyCode, event); } ``` 在上述...

    Android 物理按键整理及实例代码

    本文将详细讲解Android物理按键的处理机制,并通过实例代码展示如何监听和响应这些按键事件。 首先,Android为开发者提供了`KeyEvent`类来表示物理按键事件。`KeyEvent`包含了按键的状态(按下或抬起)和按键的类型...

    Android 中文 API (18) —— AbsSeekBar

    - 返回值:如果事件被处理则返回`true`,否则返回`false`,允许其他监听器继续处理该事件。 4. **`onTouchEvent(MotionEvent event)`** - 用途:处理触摸事件。 - 参数:`event`为`MotionEvent`对象,包含了...

    Android游戏开发之处理按键的响应方式

    Android定义了一系列键码常量,如`KeyEvent.KEYCODE_DPAD_CENTER`(中心键)、`KeyEvent.KEYCODE_BACK`(返回键)等,用于识别不同的按键。开发者可以通过比较`KeyEvent`的键码来判断用户按下的具体按键。 4. **...

    Android游戏开发之旅.pdf

    在Android游戏开发中,实现各种交互功能是至关重要的,尤其是对于动作类游戏,长按事件的处理是必不可少的。在Android系统中,Button组件通常用于用户点击交互,但有时我们需要更复杂的行为,例如长按触发特定操作。...

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...

    Google Android SDK开发范例大全(PDF高清完整版3)(4-3)

    5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...

    Google Android SDK开发范例大全(PDF完整版4)(4-4)

    5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...

    Android API 中文(15) —— GridView

    - **`public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)`**:处理按键重复事件。总是返回`false`,即不处理此事件。 - **`public boolean onKeyUp(int keyCode, KeyEvent event)`**:...

    Android2.2 API 中文文档系列(9) —— ZoomButton

    - **作用**:该方法是处理未被处理的移动事件(通常是键盘箭头键操作)的最后一个机会。它在当前焦点视图内部未处理移动事件并且系统也无法根据指定方向找到新的焦点视图时被调用。 - **参数**: - `focused`:...

    android 图片放大与缩小

    5. **按键监听**:`onKeyDown()` 方法用于处理按键事件。当用户按下上箭头键时,`keyCode==KeyEvent.KEYCODE_DPAD_UP`,`zoomControler` 增加10,表示图片放大;按下下箭头键,`keyCode==KeyEvent.KEYCODE_DPAD_DOWN...

    Android_API_中文_(15)_——_GridView.doc

    实现默认的按键事件处理,例如当用户按下 KEYCODE_DPAD_CENTER 或 KEYCODE_ENTER 时,如果视图可用且可点击,会触发视图的操作。 4. public boolean onKeyMultiple (int keyCode, int repeatCount, KeyEvent event...

Global site tag (gtag.js) - Google Analytics