onKeyDown事件与Layout坐标交互

 

package irdc.ex05_20;



import android.app.Activity;

import android.os.Bundle;

import android.util.DisplayMetrics;

import android.view.KeyEvent;

import android.view.View;

import android.widget.AbsoluteLayout;

import android.widget.Button;

import android.widget.Toast;



public class EX05_20 extends Activity

{

  private Button mButton01;

  private int intWidth, intHeight, intButtonX, intButtonY;

  

  /* 存储屏幕的分辨率 */

  private int intScreenX, intScreenY;

  

  /* 按钮位移的平移量 */

  private int intShift = 2;

  

  /** Called when the activity is first created. */

  @Override

  public void onCreate(Bundle savedInstanceState)

  {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    

    //一般的结构描述信息显示,如它的大小,密度和字体缩放。

//    要访问DisplayMetrics成员,初始化一个这样的对象:

    DisplayMetrics dm = new DisplayMetrics(); 

    getWindowManager().getDefaultDisplay().getMetrics(dm);

    

    /* 取得屏幕解析像素 */

    intScreenX = dm.widthPixels;

    intScreenY = dm.heightPixels;

    

    /* 定义按钮的宽x高 */

    intWidth = 80;

    intHeight = 40;

    

    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

    );

    

    /* 以setLayoutParams方法,重新安排Layout上的位置 */

    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 = intScreenX-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();

    }

  }

}



 

你可能感兴趣的:(onKeyDown)