EX05_20.java
上传用户:vip_99
上传日期:2021-03-27
资源大小:61159k
文件大小:4k
源码类别:

android开发

开发平台:

Java

  1. package irdc.ex05_20;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.util.DisplayMetrics;
  5. import android.view.KeyEvent;
  6. import android.view.View;
  7. import android.widget.AbsoluteLayout;
  8. import android.widget.Button;
  9. import android.widget.Toast;
  10. public class EX05_20 extends Activity
  11. {
  12.   private Button mButton01;
  13.   private int intWidth, intHeight, intButtonX, intButtonY;
  14.   
  15.   /* 存储屏幕的分辨率 */
  16.   private int intScreenX, intScreenY;
  17.   
  18.   /* 按钮位移的平移量 */
  19.   private int intShift = 2;
  20.   
  21.   /** Called when the activity is first created. */
  22.   @Override
  23.   public void onCreate(Bundle savedInstanceState)
  24.   {
  25.     super.onCreate(savedInstanceState);
  26.     setContentView(R.layout.main);
  27.     
  28.     DisplayMetrics dm = new DisplayMetrics(); 
  29.     getWindowManager().getDefaultDisplay().getMetrics(dm);
  30.     
  31.     /* 取得屏幕解析像素 */
  32.     intScreenX = dm.widthPixels;
  33.     intScreenY = dm.heightPixels;
  34.     
  35.     /* 定义按钮的宽x高 */
  36.     intWidth = 80;
  37.     intHeight = 40;
  38.     
  39.     mButton01 =(Button) findViewById(R.id.myButton1);
  40.     
  41.     /* 初始化按钮位置居中 */
  42.     RestoreButton();
  43.     
  44.     /* 当点击按钮,还原初始位置 */
  45.     mButton01.setOnClickListener(new Button.OnClickListener()
  46.     {
  47.       @Override
  48.       public void onClick(View v)
  49.       {
  50.         // TODO Auto-generated method stub
  51.         RestoreButton();
  52.       }
  53.     });
  54.   }
  55.   
  56.   @Override
  57.   public boolean onKeyDown(int keyCode, KeyEvent event)
  58.   {
  59.     // TODO Auto-generated method stub
  60.     switch(keyCode)
  61.     {
  62.       /* 中间按键 */
  63.       case KeyEvent.KEYCODE_DPAD_CENTER:
  64.         /* keyCode=23 */
  65.         RestoreButton();
  66.         break;
  67.       /* 上按键 */
  68.       case KeyEvent.KEYCODE_DPAD_UP:
  69.         /* keyCode=19 */
  70.         MoveButtonUp();
  71.         break;
  72.       /* 下按键 */
  73.       case KeyEvent.KEYCODE_DPAD_DOWN:
  74.         /* keyCode=20 */
  75.         MoveButtonDown();
  76.         break;
  77.       /* 左按键 */
  78.       case KeyEvent.KEYCODE_DPAD_LEFT:
  79.         /* keyCode=21 */
  80.         MoveButtonLeft();
  81.         break;
  82.       /* 右按键 */
  83.       case KeyEvent.KEYCODE_DPAD_RIGHT:
  84.         /* keyCode=22 */
  85.         MoveButtonRight();
  86.         break;
  87.     }
  88.     return super.onKeyDown(keyCode, event);
  89.   }
  90.   
  91.   /* 还原按钮位置的事件处理 */
  92.   public void RestoreButton()
  93.   {
  94.     intButtonX = ((intScreenX-intWidth)/2);
  95.     intButtonY = ((intScreenY-intHeight)/2);
  96.     mMakeTextToast
  97.     (
  98.       "("+
  99.       Integer.toString(intButtonX)+
  100.       ","+
  101.       Integer.toString(intButtonY)+")",true
  102.     );
  103.     
  104.     /* 以setLayoutParams方法,重新安排Layout上的位置 */
  105.     mButton01.setLayoutParams
  106.     (
  107.       new AbsoluteLayout.LayoutParams
  108.       (intWidth,intHeight,intButtonX,intButtonY)
  109.     );
  110.   }
  111.   
  112.   /* 点击DPAD上按键时事件处理 */
  113.   public void MoveButtonUp()
  114.   {
  115.     intButtonY = intButtonY-intShift;
  116.     /* 预防按钮到达下边界时的处理 */
  117.     if(intButtonY<0)
  118.     {
  119.       intButtonY = 0;
  120.     }
  121.     mButton01.setLayoutParams
  122.     (
  123.       new AbsoluteLayout.LayoutParams
  124.       (intWidth,intHeight,intButtonX,intButtonY)
  125.     );
  126.   }
  127.   
  128.   /* 点击DPAD下按键时事件处理 */
  129.   public void MoveButtonDown()
  130.   {
  131.     intButtonY = intButtonY+intShift;
  132.     /* 预防按钮到达下边界时的处理 */
  133.     if(intButtonY>(intScreenY-intHeight))
  134.     {
  135.       intButtonY = intScreenX-intHeight;
  136.     }
  137.     mButton01.setLayoutParams
  138.     (
  139.       new AbsoluteLayout.LayoutParams
  140.       (intWidth,intHeight,intButtonX,intButtonY)
  141.     );
  142.   }
  143.   
  144.   /* 点击DPAD左按键时事件处理 */
  145.   public void MoveButtonLeft()
  146.   {
  147.     intButtonX = intButtonX-intShift;
  148.     /* 预防按钮到达左边界时的处理 */
  149.     if(intButtonX<0)
  150.     {
  151.       intButtonX = 0;
  152.     }
  153.     mButton01.setLayoutParams
  154.     (
  155.       new AbsoluteLayout.LayoutParams
  156.       (intWidth,intHeight,intButtonX,intButtonY)
  157.     );
  158.   }
  159.   
  160.   /* 点击DPAD右按键时事件处理 */
  161.   public void MoveButtonRight()
  162.   {
  163.     intButtonX = intButtonX+intShift;
  164.     /* 预防按钮到达右边界时的处理 */
  165.     if(intButtonX>(intScreenX-intWidth))
  166.     {
  167.       intButtonX = intScreenX-intWidth;
  168.     }
  169.     mButton01.setLayoutParams
  170.     (
  171.       new AbsoluteLayout.LayoutParams
  172.       (intWidth,intHeight,intButtonX,intButtonY)
  173.     );
  174.   }
  175.   
  176.   public void mMakeTextToast(String str, boolean isLong)
  177.   {
  178.     if(isLong==true)
  179.     {
  180.       Toast.makeText(EX05_20.this, str, Toast.LENGTH_LONG).show();
  181.     }
  182.     else
  183.     {
  184.       Toast.makeText(EX05_20.this, str, Toast.LENGTH_SHORT).show();
  185.     }
  186.   }
  187. }