继上一个版本的改进,提高了效率
主要改动点在surfaceViewdraw使其后台循环更新,将矩形换成闪烁圆饼,
好吧废话少说,先上图!
package com.logan.androidtest;
import android.app.Activity;
import android.os.Bundle;
import com.logan.androidtest.view.GameSurfaceView;
/**
*
* @author xuan.lx
*
*/
public class GameSurfaceViewActivity extends Activity {
public static float y = 0;
public static float x = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GameSurfaceView view = new GameSurfaceView(this);
setContentView(view);
}
}
package com.logan.androidtest.view;
import com.logan.androidtest.Constant;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
/**
*
* @author xuan.lx
*
*/
public class GameSurfaceView extends SurfaceView implements
SurfaceHolder.Callback {
public static float y = 0;
public static float x = 0;
SurfaceView surfaceView;
SurfaceHolder sfh;
int miCount = 0;
// 控制循环
boolean mbLoop = false;
public GameSurfaceView(Context context) {
super(context);
sfh = this.getHolder();// 获取holder
sfh.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
new DrawImage().start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// 停止循环
mbLoop = false;
}
/**
* 绘图线程
*/
class DrawImage extends Thread {
public void run() {
while (!mbLoop) {
try {
Thread.sleep(100);
} catch (Exception e) {
}
synchronized (sfh) {
draw();
}
}
}
// 绘图方法
public void draw() {
// 锁定画布,得到canvas
Canvas canvas = sfh.lockCanvas();
if (sfh == null || canvas == null) {
return;
}
if (miCount < 100) {
miCount++;
} else {
miCount = 0;
}
// 绘图
Paint mPaint = new Paint();
mPaint.setAntiAlias(true);
// 绘制矩形--清屏作用
canvas.drawColor(Color.BLACK);
switch (miCount % 4) {
case 0:
mPaint.setColor(Color.BLUE);
break;
case 1:
mPaint.setColor(Color.GREEN);
break;
case 2:
mPaint.setColor(Color.RED);
break;
case 3:
mPaint.setColor(Color.YELLOW);
break;
default:
mPaint.setColor(Color.WHITE);
break;
}
canvas.drawCircle(x, y, 20, mPaint);
// 绘制后解锁,绘制后必须解锁才能显示
sfh.unlockCanvasAndPost(canvas);
}
//原来的矩形
public void drawRect() {
// 绘图
Paint mPaint = new Paint();
mPaint.setColor(Color.BLUE);
Canvas c = sfh.lockCanvas(null);
c.drawColor(Color.BLACK);// 清除画布
c.drawRect(x, y, x + 40, y + 40, mPaint);
sfh.unlockCanvasAndPost(c);// 更新屏幕显示内容
Log.e(Constant.TAG = "ControlViewView", "DrawImage");
}
}
// 触摸事件
public boolean onTouchEvent(MotionEvent event) {
y = event.getY();
x = event.getX();
return true;
}
}