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

 

转载于:https://www.cnblogs.com/lidaohang/archive/2011/01/16/1936975.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值