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