我画船左右移动的时候 出现多个重复 不知道为什么!package com.example.asd;import com.example.asd.R.drawable;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;public class SurfaceTest extends SurfaceView implements Callback,Runnable{
private SurfaceHolder sfh;
private Bitmap boatPic,enemyPic,bombPic,boomPic;
private int x=100,y=100;
private Thread thread;
private boolean flag,flag1;
private int enemyX=300,enemyY=300;
private int boatWidth,boatHeight,screenHeight,screenWidth;
private Canvas mCanvas;
public SurfaceTest(Context context) {
super(context);
sfh=this.getHolder();
sfh.addCallback(this);
boatPic=BitmapFactory.decodeResource(getResources(), drawable.ship1);
enemyPic=BitmapFactory.decodeResource(getResources(), drawable.qiant);
boomPic=BitmapFactory.decodeResource(getResources(), drawable.boom);
bombPic=BitmapFactory.decodeResource(getResources(), drawable.b2);
boatWidth=boatPic.getWidth();
boatHeight=boatPic.getHeight();
}
public void onDraw(){
mCanvas=sfh.lockCanvas();
Paint paint=new Paint();
paint.setColor(Color.RED);
/**
* 调用画船;
*/
drawBoatPic(mCanvas,paint);
// drawEnemy(mCanvas,paint);
// mCanvas.drawCircle(100, 100, 50, paint);
sfh.unlockCanvasAndPost(mCanvas);
}
/**
* 绘制画船;
* @param canvas
* @param paint
*/
public void drawBoatPic(Canvas canvas,Paint paint){ canvas.drawBitmap(boatPic, x, y, paint); }
/**
* 绘制地敌船;
*/
/* public void drawEnemy(Canvas canvas,Paint paint){
canvas.drawBitmap(enemyPic,enemyX,enemyY,paint);
}*/
/**
* thread对象中的构造函数 一开始就被调用;
*/
public void run() {
while(flag){
onDraw();
}
}
public boolean onTouchEvent(MotionEvent event){
super.onTouchEvent(event);
int temptyX=(int)event.getX();
int temptyY=(int)event.getY();
if(temptyY<y){
if(temptyX<screenWidth/2&&temptyX>boatWidth/2){
x-=5;
}else if(temptyX>screenWidth/2&&temptyX<screenWidth-boatWidth/2){
x+=5;
}else if(temptyY>y){
createBullet();
}
}
flag=true;
return flag; }
private void createBullet() {
// TODO Auto-generated method stub
}
public void surfaceCreated(SurfaceHolder arg0) {
flag=true; screenWidth=getWidth();
screenHeight=getHeight();
thread=new Thread(this);
thread.start();
} public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
} public void surfaceDestroyed(SurfaceHolder arg0) {
flag=false;
}
}
androidimportthreadcallback
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;public class SurfaceTest extends SurfaceView implements Callback,Runnable{
private SurfaceHolder sfh;
private Bitmap boatPic,enemyPic,bombPic,boomPic;
private int x=100,y=100;
private Thread thread;
private boolean flag,flag1;
private int enemyX=300,enemyY=300;
private int boatWidth,boatHeight,screenHeight,screenWidth;
private Canvas mCanvas;
public SurfaceTest(Context context) {
super(context);
sfh=this.getHolder();
sfh.addCallback(this);
boatPic=BitmapFactory.decodeResource(getResources(), drawable.ship1);
enemyPic=BitmapFactory.decodeResource(getResources(), drawable.qiant);
boomPic=BitmapFactory.decodeResource(getResources(), drawable.boom);
bombPic=BitmapFactory.decodeResource(getResources(), drawable.b2);
boatWidth=boatPic.getWidth();
boatHeight=boatPic.getHeight();
}
public void onDraw(){
mCanvas=sfh.lockCanvas();
Paint paint=new Paint();
paint.setColor(Color.RED);
/**
* 调用画船;
*/
drawBoatPic(mCanvas,paint);
// drawEnemy(mCanvas,paint);
// mCanvas.drawCircle(100, 100, 50, paint);
sfh.unlockCanvasAndPost(mCanvas);
}
/**
* 绘制画船;
* @param canvas
* @param paint
*/
public void drawBoatPic(Canvas canvas,Paint paint){ canvas.drawBitmap(boatPic, x, y, paint); }
/**
* 绘制地敌船;
*/
/* public void drawEnemy(Canvas canvas,Paint paint){
canvas.drawBitmap(enemyPic,enemyX,enemyY,paint);
}*/
/**
* thread对象中的构造函数 一开始就被调用;
*/
public void run() {
while(flag){
onDraw();
}
}
public boolean onTouchEvent(MotionEvent event){
super.onTouchEvent(event);
int temptyX=(int)event.getX();
int temptyY=(int)event.getY();
if(temptyY<y){
if(temptyX<screenWidth/2&&temptyX>boatWidth/2){
x-=5;
}else if(temptyX>screenWidth/2&&temptyX<screenWidth-boatWidth/2){
x+=5;
}else if(temptyY>y){
createBullet();
}
}
flag=true;
return flag; }
private void createBullet() {
// TODO Auto-generated method stub
}
public void surfaceCreated(SurfaceHolder arg0) {
flag=true; screenWidth=getWidth();
screenHeight=getHeight();
thread=new Thread(this);
thread.start();
} public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
} public void surfaceDestroyed(SurfaceHolder arg0) {
flag=false;
}
}
androidimportthreadcallback
解决方案 »
- 很有意思的问题,写出你的结果(Java基础牢不牢)
- 线程在sleep(1) 1毫秒中能执行多少条指令,今天测试了下,1毫秒怎么可以算那么多条指令。。。
- 帮忙看一下jsp页面
- 如何从TextField中得到其中输入的string
- 如何测试一个socket连接是否仍然有效?
- java做出来的应用程序是不是不能做成.exe文件呢?如果可以用什么软件可以?
- .;D:\j2sdk1.4.0\lib\tools.jar;D:\j2sdk1.4.0\lib\dt.jar;D:\j2sdk1.4.0\bin;C:\javamail-1.2\mail.jar;C:\jaf-1.0.1\activation.jar;
- 直接修改class文件的可能性!?
- 请解释一下:System.out.println(data)
- 请大佬解答,关于replace的问题,理解看懂这个程序的用途
- 无聊,写了个Java病毒
- ButtonGroup的添加问题,小菜求教!
的后面试试看可不可以解决问题。