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();    }  }}




原创粉丝点击