Android--DPAD键的事件处理
来源:互联网 发布:php采集网站数据 编辑:程序博客网 时间:2024/05/20 00:38
什么是键?相信大家可能并不会陌生,它就是手机上的方向键,还有一个是中间键。
如下截图:
其中红色的标记就是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--DPAD键的事件处理
- android DPAD
- DPAD按键处理
- 解决Android AVD的方向键DPAD不能用的问题
- 解决Android AVD的方向键DPAD不能用的问题
- 关于Android AVD的方向键DPAD不能用的问题
- 解决Android AVD的方向键DPAD不能用的问题
- Android Virtual Device解决Dpad is not enabled的问题
- Android的事件处理
- Android的事件处理
- Android的事件处理
- android的事件处理
- Android的事件处理
- Android事件的处理
- Android 的事件处理
- Android的事件处理
- Android的事件处理
- Android DPAD按键无法使用
- Java程序栈信息文件中的秘密(三)
- 关于stdint.h头文件
- linux时间函数gettimeofday解析
- 各种js 验证
- 为何 Emacs 和 Vim 被称为两大神器
- Android--DPAD键的事件处理
- 内存(2013)
- IT职场人生系列
- 我的代码之美_开篇介绍
- 彻底解决android读取中文txt,lrc的乱码(自动判断文档类型并转码)
- HDU_2020 绝对值排序
- Three20软件引擎之自定义TableView列表详解
- Custom cells in TTTableViewController
- 与员工一对一交流-企业经营必行之道读后感