android surfaceview 指哪画哪升级版!
16lz
2021-01-25
继上一个版本的改进,提高了效率
主要改动点在surfaceView draw使其后台循环更新,将矩形换成闪烁圆饼,
好吧废话少说,先上图!
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 implementsSurfaceHolder.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();// 获取holdersfh.addCallback(this);}@Overridepublic void surfaceCreated(SurfaceHolder holder) {new DrawImage().start();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic 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() {// 锁定画布,得到canvasCanvas 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;}}
更多相关文章
- Android——在SurfaceView上绘图
- android 如何用代码生成圆角Bitmap图片
- Android唤醒屏幕并解锁
- nexus6 升级5.1
- Android(安卓)path.op 和canvas.clipPath使用一例
- Android(安卓)绘制带有边框的文字
- android 图片转 圆形和圆角矩形
- Android(安卓)View与SurfaceView的手绘板制作
- Android(安卓)opencv人脸识别