移动

原创 2011年01月24日 01:38:00

public
 
class
 
Move
 
extends
 
Activity

{
 
/*图片的宽度*/
 
private int intWidth ;
 
 
/*图片的高度*/
 
private int intHeight ;
 
 
/*图片的X坐标*/
 
private int intButtonX ;
 
 
/*图片的Y坐标*/
 
private int intButtonY ;
 
 
/* 存储屏幕的分辨率 */
 
private int intScreenX , intScreenY ;
 
 
/* 按钮位移的平移量 */
 
private int intShift = 20 ;
 
 
/*运行速度(数值越大,速度越小)*/
 
private int speen = 1000 ;
 
/*图片*/
 
private ImageView myImage ;
 
 
/*定时器*/
 
Timer timer = new Timer ( true );
 
 
/** Called when the activity is first created. */
 
@Override
 
public void onCreate ( Bundle savedInstanceState )
 
{
   
super . onCreate ( savedInstanceState );
    setContentView
( R . layout . main );
   
    myImage
= ( ImageView ) findViewById ( R . id . myImage );
   
   
DisplayMetrics dm = new DisplayMetrics ();
    getWindowManager
(). getDefaultDisplay (). getMetrics ( dm );
   
   
/* 取得屏幕解析像素 */
    intScreenX
= dm . widthPixels ;
    intScreenY
= dm . heightPixels ;
   
   
/* 定义按钮的宽x高 */
    intWidth
= 20 ;
    intHeight
= 20 ;
   
   
/* 初始化按钮位置居中 */
   
RestoreButton ();
   
   
/* 当点击按钮,还原初始位置 */
    myImage
. setOnClickListener ( new Button . OnClickListener ()
   
{
     
public void onClick ( View v )
     
{
       
// TODO Auto-generated method stub
       
RestoreButton ();
     
}
   
});
 
}

 
private int flag = 0 ;
 
TimerTask task = new TimerTask (){
   
public void run (){
     
Message message = new Message ();
      message
. what = flag ;
      handler
. sendMessage ( message );
//      MoveButtonUp();
   
}
 
};
 
 
Handler handler = new Handler ()
 
{
   
public void handleMessage ( Message msg )
   
{
     
if ( intButtonY - intShift <= 0 )
     
{
        setTitle
( "game over " + flag );
     
} else
     
{
       
switch ( msg . what )
       
{
         
case 1 :
           
MoveButtonUp ();
           
break ;
         
case 2 :
           
MoveButtonDown ();
           
break ;
         
case 3 :
           
MoveButtonLeft ();
           
break ;
         
case 4 :
           
MoveButtonRight ();
           
break ;
       
}
       
     
}

     
super . handleMessage ( msg );
   
}
 
};
 
 
@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 */
       
if ( flag != 2 ){
         
MoveButtonUp ();
       
}
       
break ;
     
/* 下按键 */
     
case KeyEvent . KEYCODE_DPAD_DOWN :
       
/* keyCode=20 */
       
if ( flag != 1 ){
         
MoveButtonDown ();
       
}
       
break ;
     
/* 左按键 */
     
case KeyEvent . KEYCODE_DPAD_LEFT :
       
/* keyCode=21 */
       
if ( flag != 4 ){
         
MoveButtonLeft ();
       
}
       
break ;
     
/* 右按键 */
     
case KeyEvent . KEYCODE_DPAD_RIGHT :
       
/* keyCode=22 */
       
if ( flag != 3 ){
         
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上的位置 */
    myImage
. setLayoutParams
   
(
     
new AbsoluteLayout . LayoutParams
     
( intWidth , intHeight , intButtonX , intButtonY )
   
);
 
}
 
 
/* 点击DPAD上按键时事件处理 */
 
public void MoveButtonUp ()
 
{
    intButtonY
= intButtonY - intShift ;
   
/* 预防按钮到达下边界时的处理 */
   
if ( intButtonY < 0 )
   
{
      intButtonY
= 0 ;
   
}
    myImage
. setLayoutParams
   
(
     
new AbsoluteLayout . LayoutParams
     
( intWidth , intHeight , intButtonX , intButtonY )
   
);
   
if ( flag == 0 )
   
{
      flag
= 1 ;
      timer
. schedule ( task , 0 , speen );
   
}
    flag
= 1 ;
 
}
 
 
/* 点击DPAD下按键时事件处理 */
 
public void MoveButtonDown ()
 
{
    intButtonY
= intButtonY + intShift ;
   
/* 预防按钮到达下边界时的处理 */
   
if ( intButtonY >( intScreenY - 70 ))
   
{
      intButtonY
= intScreenY - 70 ;
   
}
//    mMakeTextToast
//    (
//      "("+Integer.toString(intButtonY)+","+Integer.toString(intScreenY-intHeight)+")",true
//    );
    myImage
. setLayoutParams
   
(
     
new AbsoluteLayout . LayoutParams
     
( intWidth , intHeight , intButtonX , intButtonY )
   
);
   
if ( flag == 0 )
   
{
      flag
= 2 ;
      timer
. schedule ( task , 0 , speen );
   
}
    flag
= 2 ;
 
}
 
 
/* 点击DPAD左按键时事件处理 */
 
public void MoveButtonLeft ()
 
{
    intButtonX
= intButtonX - intShift ;
   
/* 预防按钮到达左边界时的处理 */
   
if ( intButtonX < 0 )
   
{
      intButtonX
= 0 ;
   
}
    myImage
. setLayoutParams
   
(
     
new AbsoluteLayout . LayoutParams
     
( intWidth , intHeight , intButtonX , intButtonY )
   
);
   
if ( flag == 0 )
   
{
      flag
= 3 ;
      timer
. schedule ( task , 0 , speen );
   
}
    flag
= 3 ;
 
}
 
 
/* 点击DPAD右按键时事件处理 */
 
public void MoveButtonRight ()
 
{
    intButtonX
= intButtonX + intShift ;
   
/* 预防按钮到达右边界时的处理 */
   
if ( intButtonX >( intScreenX - intWidth ))
   
{
      intButtonX
= intScreenX - intWidth ;
   
}
    myImage
. setLayoutParams
   
(
     
new AbsoluteLayout . LayoutParams
     
( intWidth , intHeight , intButtonX , intButtonY )
   
);
   
if ( flag == 0 )
   
{
      flag
= 4 ;
      timer
. schedule ( task , 0 , speen );
   
}
    flag
= 4 ;
 
}
 
 
public void mMakeTextToast ( String str , boolean isLong )
 
{
   
if ( isLong == true )
   
{
     
Toast . makeText ( Move . this , str , Toast . LENGTH_LONG ). show ();
   
}
   
else
   
{
     
Toast . makeText ( Move . this , str , Toast . LENGTH_SHORT ). show ();
   
}
 
}
}


main
. xml
<? xml version = "1.0" encoding = "utf-8" ?>
< AbsoluteLayout
  xmlns
: android = "http://schemas.android.com/apk/res/android"
  android
: background = "@drawable/white"
  android
: orientation = "vertical"
  android
: layout_width = "fill_parent"
  android
: layout_height = "fill_parent"
 
>
 
< ImageView
        android
: id = "@+id/myImage"
        android
: src = "@drawable/a"
        android
: layout_width = "10px"
    android
: layout_height = "10px"
 
/>
</ AbsoluteLayout >

C++ 移动构造与移动赋值运算符

一,为何需要移动语义? 我们定义了下面这个Useless类 class Useless{ private: string name; char *p; public: Usel...
  • cloud323
  • cloud323
  • 2017年04月24日 10:24
  • 849

用fs移动文件

同一分区内移动文件: var fs=require("fs"); var file="G:\\VS2010.rar"; var newFile="G:\\WessengerServer(Node...
  • venchia_lu
  • venchia_lu
  • 2015年05月20日 17:13
  • 789

shell脚本实现移动文件

# !/bin/sh #echo "$processid 请管理员注意,99.88 拼接服务暂停服务 " >>monitor.log #echo 启动了 | mailx -s "test" pang...
  • SDUTACM
  • SDUTACM
  • 2016年09月28日 16:40
  • 2274

移动构造函数和移动赋值运算符

为了直观地观察移动构造函数和移动赋值运算符的运行方式,编写一个类Pointer,该类的对象会在堆动态创建一个数组,因此移动构造函数和移动赋值运算符是很有必要的,因为可以避免深度复制,提高效率。...
  • bupt8846
  • bupt8846
  • 2015年02月15日 09:22
  • 2282

SAP-MM移动类型解析。

每一个学习MM模块的童鞋,大量的移动类型都是需要了解的,101、102、201、202等等。我当时在学的时候也发现有SAP设置了很多移动类型,然后去了解每个移动类型的作用和使用的业务背景。可是当我学了...
  • qq_33641781
  • qq_33641781
  • 2017年08月14日 23:38
  • 607

mysql数据文件移动

今天测试了下mysql的数据文件移动,很方便,在A机器上有个库,想要移动到B机器上去,如果不想要拷贝mysql的文件,可以直接拷贝库文件夹和ibdata1数据文件过去即可,如果只是移动了库的文件夹,没...
  • aoerqileng
  • aoerqileng
  • 2016年09月08日 16:26
  • 548

svn移动文件(目录)

来源:http://tortoisesvn.net/docs/release/TortoiseSVN_zh_CN/tsvn-dug-rename.html移动文件和文件夹如果你仅想重命名文件或文件夹,...
  • wuyao721
  • wuyao721
  • 2011年07月04日 00:47
  • 17758

github之移动文件

1. 前言在这一章中,我们要学习移动文件,其实作为linux风格的github命令。因此其原理上,和linux十分相似。2. git mv 命令在Git中,重命名和移动文件是同一件事情 ,最基本的想法...
  • qq_35082030
  • qq_35082030
  • 2017年07月10日 11:07
  • 1280

数组元素移动

描述 试设计一个算法,将数组a中的元素a[0]至a[n-1]循环右移k位,并要求只用一个元素大小的附加存储,元素移动或交换次数为O(n)。   输入 先输入一个大于1且小于100的正整数n,再...
  • axiqia
  • axiqia
  • 2016年03月25日 19:08
  • 1276

LintCode:移动零

给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序  注意事项 1.必须在原数组上操作 2.最小化操作数 您在真实的面试中是否遇到过这个题?  Yes...
  • zyf19930610
  • zyf19930610
  • 2016年12月07日 20:49
  • 398
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:移动
举报原因:
原因补充:

(最多只允许输入30个字)