【例6-7】游戏中触屏事件示例
将图片logo.gif和alice.jpg复制到图片目录。无需创建布局文件。设计两个角色:海豚Alice和小章鱼。当手指点击屏幕,小章鱼就移动到点击位置。如果点击位置在Alice区域内,则小章鱼保持不动,弹出一个“不能碰到Alice”的提示信息。

教学视频
控制文件TouchActivity.java的源代码如下:(红色是教材没有的代码)
package com.example.chap06;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
//【例6-7】游戏中触屏事件示例。
public class TouchActivity extends Activity {
TestView testView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
testView = new TestView(this);
setContentView(testView);
testView.setOnTouchListener(new onTouch());
}
class onTouch implements View.OnTouchListener{
int x,y;
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
x = (int) event.getX();
y = (int) event.getY();
testView.getXY(x, y);
setContentView(testView);
return true;
}
return false;
}
}
private class TestView extends View {
Bitmap mBitmap,mAlice,mHaidi ; //小章鱼,海豚,海草
int AliceW,AliceH, pHeight;
public TestView(Context context) {
super(context);
mHaidi = BitmapFactory.decodeResource(getResources(), R.drawable.haidi);
mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo);
mAlice = BitmapFactory.decodeResource(getResources(), R.drawable.alice);
AliceW=mAlice.getWidth(); //获取图片大小
AliceH=mAlice.getHeight();
}
int x = 600, y = 600; //小章鱼的初始坐标
void getXY(int dongx, int dongy) {
if((dongx<AliceW)&&(dongy<AliceH)){ //小章鱼不能移动到Alice的图像区域内
Toast.makeText(TouchActivity.this,"不能碰到Alice", Toast.LENGTH_SHORT).show();
}else{
x = dongx;
y = dongy;
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
pHeight=canvas.getHeight()-mHaidi.getHeight(); //海草图片高度
canvas.drawBitmap(mHaidi, 0, pHeight, null);
canvas.drawBitmap(mAlice, 0, 0, null);
canvas.drawBitmap(mBitmap, x, y, null);
}
}
}
打开项目配置文件AndroidManifest.xml,配置要启动的Activity类名为TouchActivity。

