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
>
|