什么是键?相信大家可能并不会陌生,它就是手机上的方向键,还有一个是中间键。
如下截图:
其中红色的标记就是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开发者可以通过重写`onKeyDown`、`onKeyUp`和`onBackPressed`方法来处理物理按键事件,特别是屏蔽后退键。不过在屏蔽系统功能前,务必考虑用户体验,确保你的应用仍然保持易用性。同时,提供的文档...
本压缩包“Android代码-TV端GridView焦点移动事件处理.rar”提供了一种处理TV端GridView焦点移动事件的方法。 首先,我们需要理解在TV应用中,GridView的焦点移动与手机或平板上的操作有所不同。在TV上,用户通过...
理解虚拟键码对照表对于开发Android应用,尤其是处理键盘事件或者自定义输入控件时至关重要。 在Android的`KeyEvent`类中,定义了一系列的常量,代表不同的键码。这些键码不仅包括常见的字母、数字键,还涵盖了一...
以上介绍了Android按键键值的一部分内容,包括常见的方向键、数字键、字母键以及特殊功能键。通过理解和使用这些键值、动作码和标记,开发者能够更灵活地处理用户的输入事件,从而提高应用程序的用户体验。在实际...
这意味着开发者可以通过这些枚举值来处理按键事件。 #### 三、Android系统全局快捷键的实现 全局快捷键的实现在Android中涉及多个层次的技术实现,包括但不限于底层的驱动程序、中间层的键值映射以及上层的应用...
在Android开发中,事件处理是构建用户界面的关键部分。Android事件主要分为两类:普通事件(如触摸屏事件)和按键事件。以下将详细介绍这两种事件及其处理机制。 1. 普通事件 普通事件通常指的是触摸屏上的点击、...
`Gallery`的XML属性包括`android:id`用于标识控件,`android:layout_width`和`android:layout_height`定义其尺寸,`android:spacing`设置项目之间的间隔,以及`android:fadingEdgeLength`定义边缘淡出长度,提高视觉...
本文档将深入探讨Android系统中的键映射(keymaps)和键盘输入处理机制,以及如何根据设备特定需求自定义键布局和字符映射。 1. 键盘输入的处理流程: - **中断或轮询程序**:Android使用标准的Linux输入事件设备...
// 处理下键或回车键事件 // 调整焦点到下一个控件 } else if (keyCode == KeyEvent.KEYCODE_DPAD_UP) { // 处理上键事件 // 调整焦点到上一个控件 } return super.onKeyDown(keyCode, event); } ``` 在上述...
本文将详细讲解Android物理按键的处理机制,并通过实例代码展示如何监听和响应这些按键事件。 首先,Android为开发者提供了`KeyEvent`类来表示物理按键事件。`KeyEvent`包含了按键的状态(按下或抬起)和按键的类型...
- 返回值:如果事件被处理则返回`true`,否则返回`false`,允许其他监听器继续处理该事件。 4. **`onTouchEvent(MotionEvent event)`** - 用途:处理触摸事件。 - 参数:`event`为`MotionEvent`对象,包含了...
Android定义了一系列键码常量,如`KeyEvent.KEYCODE_DPAD_CENTER`(中心键)、`KeyEvent.KEYCODE_BACK`(返回键)等,用于识别不同的按键。开发者可以通过比较`KeyEvent`的键码来判断用户按下的具体按键。 4. **...
在Android游戏开发中,实现各种交互功能是至关重要的,尤其是对于动作类游戏,长按事件的处理是必不可少的。在Android系统中,Button组件通常用于用户点击交互,但有时我们需要更复杂的行为,例如长按触发特定操作。...
5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...
5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...
5.20 DPAD按键处理——onKeyDown事件与Layout坐标交互 5.21 任务管理器正在运行的程序——RunningTaskInfo 5.22 动态更改屏幕方向——LANDSCAPE与PORTRAIT 5.23 系统设置更改事件——onConfigurationChanged信息处理...
- **`public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)`**:处理按键重复事件。总是返回`false`,即不处理此事件。 - **`public boolean onKeyUp(int keyCode, KeyEvent event)`**:...
- **作用**:该方法是处理未被处理的移动事件(通常是键盘箭头键操作)的最后一个机会。它在当前焦点视图内部未处理移动事件并且系统也无法根据指定方向找到新的焦点视图时被调用。 - **参数**: - `focused`:...
5. **按键监听**:`onKeyDown()` 方法用于处理按键事件。当用户按下上箭头键时,`keyCode==KeyEvent.KEYCODE_DPAD_UP`,`zoomControler` 增加10,表示图片放大;按下下箭头键,`keyCode==KeyEvent.KEYCODE_DPAD_DOWN...
实现默认的按键事件处理,例如当用户按下 KEYCODE_DPAD_CENTER 或 KEYCODE_ENTER 时,如果视图可用且可点击,会触发视图的操作。 4. public boolean onKeyMultiple (int keyCode, int repeatCount, KeyEvent event...