无法触摸控制飞机

蛋炒饭团 2016-03-08 11:07:30
package com.example.dfj;

import java.util.ArrayList;
import java.util.List;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.MonthDisplayHelper;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;

@SuppressLint("ClickableViewAccessibility")
public class DFJGameView extends SurfaceView
implements SurfaceHolder.Callback,Runnable,
android.view.View.OnTouchListener {
private Bitmap zj;
private Bitmap diji;
private Bitmap zidan;
private Bitmap bg;
private Bitmap erjihuancun;
private Bitmap boom;
private int display_w;
private int display_h;
private List<GameImage> gameImages = new ArrayList();

public DFJGameView(Context context) {
super(context);
getHolder().addCallback(this);
this.setOnTouchListener(this);
}
private void init() {
zj = BitmapFactory.decodeResource(getResources(), R.drawable.zj);
diji = BitmapFactory.decodeResource(getResources(), R.drawable.diji);
boom = BitmapFactory.decodeResource(getResources(), R.drawable.boom);
bg = BitmapFactory.decodeResource(getResources(), R.drawable.beijing);
zidan = BitmapFactory.decodeResource(getResources(), R.drawable.zidan);
erjihuancun = Bitmap.createBitmap(display_w, display_h, Config.ARGB_8888);
gameImages.add(new BeingjingImage(bg));
gameImages.add(new FeijiImage(zj));
}
private interface GameImage {
public Bitmap getBitmap();
public int getX();
public int getY();
}

private class FeijiImage implements GameImage {
private Bitmap zj;
private int x;
private int y;
private int width;

public int getWidth() {
return width;
}

public int getHeight() {
return height;
}

private int height;

private List<Bitmap> bitmaps = new ArrayList<Bitmap>();

private FeijiImage(Bitmap zj) {
this.zj = zj;
bitmaps.add(Bitmap.createBitmap(zj, 0, 0, zj.getWidth() / 4, zj.getHeight()));
bitmaps.add(Bitmap.createBitmap(zj, (zj.getWidth() / 4 )* 1, 0, zj.getWidth() / 4, zj.getHeight()));
bitmaps.add(Bitmap.createBitmap(zj, (zj.getWidth() / 4 )* 2, 0, zj.getWidth() / 4, zj.getHeight()));
bitmaps.add(Bitmap.createBitmap(zj, (zj.getWidth() / 4 )* 3, 0, zj.getWidth() / 4, zj.getHeight()));

width = zj.getWidth() / 4;
height = zj.getHeight();

x = (display_w - zj.getWidth() / 4) / 2;
y = display_h - zj.getHeight() - 30;

}

private int index = 0;
private int num=0;
public Bitmap getBitmap() {
Bitmap bitmap = bitmaps.get(index);
if(num == 10){
index++;
if (index == bitmaps.size()) {
index = 0;
}
num=0;
}
num++;
return bitmap;
}

public int getX() {
return x;
}

public int getY() {
return y;
}

public void setY(int y) {
this.y = y;
}

public void setX(int x) {
this.x = x;
}

}

private class BeingjingImage implements GameImage {
private Bitmap bg;

private BeingjingImage(Bitmap bg) {
this.bg = bg;
newBitmap = Bitmap.createBitmap(display_w, display_h, Config.ARGB_8888);
}

private Bitmap newBitmap = null;
private int height = 0;

public Bitmap getBitmap() {
Paint p = new Paint();
Canvas canvas = new Canvas(newBitmap);
canvas.drawBitmap(bg, new Rect(0, 0, bg.getWidth(), bg.getHeight()), new Rect(0, 0, display_w, display_h),
p);
canvas.drawBitmap(bg, new Rect(0, 0, bg.getWidth(), bg.getHeight()), new Rect(-display_w, -display_h, 0, 0),
p);
if (height == display_h) {
height = 0;
}
return newBitmap;
}

public int getX() {
return 0;
}

public int getY() {
return 0;
}

}

private boolean state = false;
private SurfaceHolder holder;

public void run() {
Paint p1 = new Paint();
try {
while (state) {
Canvas newCanvas = new Canvas(erjihuancun);
for (GameImage image : gameImages) {
newCanvas.drawBitmap(image.getBitmap(), image.getX(),
image.getY(), p1);
}
Canvas canvas = holder.lockCanvas();
canvas.drawBitmap(erjihuancun, 0, 0, p1);
holder.unlockCanvasAndPost(canvas);
Thread.sleep(10);
}

} catch (Exception e) {
}
}

public void surfaceCreated(SurfaceHolder holder) {
}

public void surfaceDestroyed(SurfaceHolder holder) {
state = false;
}

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
display_w = width;
display_h = height;
init();
this.holder = holder;
state = true;
new Thread(this).start();
}

FeijiImage selectFeiji;
private FeijiImage game;
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
for (GameImage game : gameImages) {
if (game instanceof FeijiImage) {
FeijiImage feiji = (FeijiImage) game;
if (feiji.getX() < event.getX() && feiji.getY() < event.getY()
&& feiji.getX() + feiji.getWidth() > event.getX()
&& feiji.getY() + feiji.getHeight() > event.getY()) {
selectFeiji = feiji;
} else {
selectFeiji = null;
}
break;
}
}
} else if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (selectFeiji != null) {
selectFeiji.setX((int) event.getX());
selectFeiji.setY((int) event.getY());
}
} else if (event.getAction() == MotionEvent.ACTION_UP) {
selectFeiji = null;
}
return true;
}
}
...全文
107 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧