先将代码贴一下
package com.ball;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags( //设置为全屏模式
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(new BallView(this));
}
}
package com.ball;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class BallView extends SurfaceView implements SurfaceHolder.Callback {
Bitmap bitmapBall = null;
Movable movable = null;
DrawThread dt;
Bitmap bmpBack;
public BallView(Context context) {
super(context);
getHolder().addCallback(this);
initBitmaps(getResources());
initMovable();
dt = new DrawThread(this,getHolder());
}
public void initBitmaps(Resources r) {
bitmapBall = BitmapFactory.decodeResource(r, R.drawable.icon);
}
public void initMovable() {
movable = new Movable(0,0,
0, bitmapBall);
}
public void doDraw(Canvas canvas) {
int color = getResources().getColor(android.R.color.white);
canvas.drawColor(color);
movable.drawSelf(canvas);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
if(!dt.isAlive()) {
dt.start();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
dt.flag = false;
dt = null;
}
}
package com.ball;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
public class DrawThread extends Thread {
boolean flag = false;
BallView ballView;
SurfaceHolder surfaceHolder;
int sleepSpan = 30;
public DrawThread(BallView ballView, SurfaceHolder surfaceHolder) {
this.ballView = ballView;
this.surfaceHolder = surfaceHolder;
this.flag = true;
}
public void run() {
Canvas canvas = null;
while(flag) {
try {
canvas = surfaceHolder.lockCanvas(null);
synchronized(surfaceHolder) {
ballView.doDraw(canvas);
}
} catch(Exception e) {
e.printStackTrace();
} finally {
if(canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
try{
Thread.sleep(sleepSpan);
}
catch(Exception e){
e.printStackTrace();
}
}
}
}
package com.ball;
import android.graphics.Bitmap;
import android.graphics.Canvas;
public class Movable {
int startX;
int startY;
int x = 0;
int y = 60;
int vt = 20;
int r;
double timeX;
Bitmap bitmap = null;
BallThread bt = null;
public Movable(int x, int y, int r, Bitmap bitmap) {
this.startX = x;
this.x = x;
this.startY = y;
this.y = y;
this.r = r;
this.bitmap = bitmap;
timeX = System.nanoTime();
bt = new BallThread(this);
bt.start();
}
public void drawSelf(Canvas canvas) {
canvas.drawBitmap(this.bitmap, x, y, null);
}
}
package com.ball;
public class BallThread extends Thread {
Movable father;
boolean flag = false;
int sleepSpan = 100;
boolean director = true;
int lengthSpan = 10;
public BallThread(Movable father){
this.father = father;
this.flag = true;
}
public void run() {
while(flag){
if(father.x > 270) {
director = false;
}
if(father.x <= 0) {
director = true;
}
if(director == true) {
father.x = father.x + lengthSpan;
} else {
father.x = father.x - lengthSpan;
}
try{
Thread.sleep(sleepSpan);
}
catch(Exception e){
e.printStackTrace();
}
}
}
}