SurfaceView 画笔随机颜色满天星

来源:互联网 发布:视频大数据分析 编辑:程序博客网 时间:2024/04/28 04:06
SurfaceView是个重要的绘图容器,它可以在主线程外的线程中向屏幕绘图,这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度。在游戏开发中多用到SurfaceView,游戏中的背景、人物、动画等等尽量在画布canvas中画出。

可以把Surface理解为显存的一个映射,写入到Surface的内容可以直接复制到显存从而显示出来,这会使得显示速度非常快),Surface被销毁之前必须结束。

代码块:

package com.example.lesson_surfaceview;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new MySurfaceView(this));    }}

package com.example.lesson_surfaceview;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.util.AttributeSet;import android.view.SurfaceHolder;import android.view.SurfaceView;/** * Created by Administrator on 2017/3/20 0020. */public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable {    public MySurfaceView(Context context) {        super(context);        init();    }    SurfaceHolder holder;    // 创建笔    Paint paint = new Paint();    private void init() {        // 添加回调监听        holder = getHolder();        // 实现SurfaceHolder.Callback接口        holder.addCallback(this);        // 设置笔的大小(单位float)        paint.setStrokeWidth(100f);    }    private void myDraw(Canvas canvas) {        // 设置画笔的颜色(把画笔的颜色设置成随机颜色,要放到这个方法里面才能出现重复随机(循环中调用了这个方法))        paint.setARGB((int) (Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255));        // 设置在画布画点(point)和画笔随机出现的位置        canvas.drawPoint((int)(Math.random()*getWidth()),(int)(Math.random()*getHeight()),paint);    }    public MySurfaceView(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    @Override    public void surfaceCreated(SurfaceHolder holder) {        // 实现Runnable接口创建线程开启线程        new Thread(this).start();    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {    }    @Override    public void run() {        while(true){            Canvas canvas = holder.lockCanvas();            // 要自己写Draw方法            myDraw(canvas);            holder.unlockCanvasAndPost(canvas);        }    }}

运行效果如图所示



0 0
原创粉丝点击