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

如下截图:

其中红色的标记就是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. */@Overridepublic 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(){@Overridepublic void onClick(View v){// TODO Auto-generated method stubRestoreButton();}});}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event){// TODO Auto-generated method stubswitch(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键的事件处理相关推荐

  1. Weex控制Android返回键解决方案

    正在深入倒腾weex,希望可以将weex用在项目中.这里找出了weex控制Android返回键的方法. 需求 项目使用的是Vue+VueRouter的单页应用来写Weex的,现有以下需求. 当页面不在 ...

  2. android音量键调节听筒音量的大小

    android音量键调节听筒音量的大小 最近发现微信的语音功能可以在听筒和喇叭间互相切换并且可以使用音量按键进行调节,之前在项目开发中只用到音频的多媒体类型播放音频文件但没用到听筒,所以就写了个dem ...

  3. Android HOME键那些事

    游戏中常常需要监听android HOME键,当HOME键下压时,往往需要做一些状态保存,音效停止等操作,那么如何做,才能监听到HOME键呢?我们知道HOME是系统键,app中无法通过onKey这些函 ...

  4. esc键 qt 退出菜单_Qt中Esc键触发事件处理

    有一段时间没有使用Qt开发,最近给公司写的小DEMO中,用到了Qt编写的界面,其中有几处用到Event处理,在编写对Esc键处理的过程中,发现closeEvent无效,最终发现了两种解决办法. 1.重 ...

  5. 如何添加Android返回键的退出功能

    环境:Cocos2dx v3.5 经网上搜索资料知道有两种方法可以实现Android返回键的退出功能,下面分别说明. 1.修改java代码 首先,在Cocos2dx的源文件中找到Cocos2dxGLS ...

  6. h5制作app,处理跳转翻页动画效果及android返回键路由跳转问题

    在h5制作的app中,设计路由跳转及跳转翻页动画是最必要的.其中有很多需要注意的问题,分享下小编的处理方式~ 一.翻页效果 首先,跳转翻页动画的监控,因为小编是用vue学的,所以在app.vue中监控 ...

  7. android 软键盘监听、隐藏、显示、点击空白处隐藏和Android KEYCODE 键值大全

    android 软键盘监听.隐藏.显示.点击空白处隐藏. textView.setOnKeyListener(new View.OnKeyListener() {@Overridepublic boo ...

  8. Android虚拟键-HOME、RECENT、BACK

    Android虚拟键-HOME.RECENT.BACK 由于项目需要,在虚拟键上折腾了不少时间,写下来总结一下,也给同样困惑的小伙伴一些启示. Home.Recent键的监听 直接上代码: //监听H ...

  9. android 拦截音量键,Android 音量键增大减小捕捉

    Android 音量键增大减小捕捉: @Override public boolean onKeyDown( int keyCode, KeyEvent event) { // TODO Auto-g ...

  10. Android KEYCODE键值对应大全

    Android KEYCODE键值对应大全 KEYCODE列表 电话键 键名 描述 键值 KEYCODE_CALL 拨号键5     KEYCODE_ENDCALL 挂机键6     KEYCODE_ ...

最新文章

  1. blktrace 工具集使用 及其实现原理
  2. IOS 之__bridge__bridge_transfer和__bridge_retained
  3. CSS中zoom和scale的区别
  4. 在中小型公司建立企业根证书颁发机构 (CA)
  5. GetLogicalDriveStrings FindFirstVolume和FindNextVolume
  6. 阿里云IoT将举办第三届极客创新挑战赛,吸引全球极客参赛
  7. Intouch和S7300连接 DAServer分组 SMC驱动备份
  8. 关于nginx upstream的几种配置方式
  9. Docker可视化界面(Consul+Shipyard+Swarm+Service Discover
  10. java实现关键词云_Java synchronized 关键字的实现原理
  11. egret性能优化总结
  12. android开发第一个程序,Android开发入门之第一个android程序
  13. 夜天之书 #34 企业如何实践开源协同
  14. ideaIU-2017安装破解及汉化全包
  15. 汽车新能源行业每周新闻纵览
  16. c4d渲染测试软件,C4D常用的4大主流渲染器
  17. kubernetes配置kubeconfig访问集群
  18. 最后3天!生信入门转录组和可视化学习捷径
  19. 【SpringCloud深入浅出系列】SpringCloud组件之集成Zuul实现过滤器
  20. 2023 新版帝国内核试玩佣金网站系统源码

热门文章

  1. array,vector对象 数组越界检测
  2. 炒冷饭系列:设计模式 装饰模式
  3. jQuery 源码分析第一篇之入口源码
  4. Go 语言调用 python2
  5. PowerCLI脚本,利用哈希表对参数进行转换
  6. Design Pattern Explained 读书笔记二——设计模式序言
  7. 一个有趣的Script脚本工具
  8. USB Kill v2.0,一个可以瞬间烧毁电脑或平板的“U盘”
  9. Linux常见面试题2
  10. 数据库复习1——数据库体系结构和关系系统