android surfaceview 指哪画哪升级版!

继上一个版本的改进,提高了效率

主要改动点在surfaceView  draw使其后台循环更新,将矩形换成闪烁圆饼,

好吧废话少说,先上图!

android surfaceview 指哪画哪升级版!

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;
	}

}

你可能感兴趣的:(java,android,view,SurfaceView)