什么是键?相信大家可能并不会陌生,它就是手机上的方向键,还有一个是中间键。
如下截图:
其中红色的标记就是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(); } }}
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow