[Android]SurfaceView模板

SurfaceView extends View
其实View是在UI线程中进行绘制
SurfaceView是在一个子线程中对自己进行绘制,优势:避免造成UI线程阻塞
其实呢,我们SurfaceView中包含一个专门用于绘制的Surface,Surface中包含一个Canvas
如何获得Canvas?
getHolder->SurfaceHolder
holder ->Canvas +管理SurfaceView的生命周期
surfaceCreated
surfaceChanged
surfaceDestroyed

Surface模板

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
 * Created by TONG on 2017/3/22.
 */

public class SurfaceTemplate extends SurfaceView implements SurfaceHolder.Callback,Runnable {

    private SurfaceHolder mHolder;
    private Canvas mCanvas;
    /**
     * 用于绘制的线程
     */
    private Thread t;
    /**
     * 线程的控制开关
     */
    private boolean isRunning;
    public SurfaceTemplate(Context context) {
        this(context,null);
    }

    public SurfaceTemplate(Context context, AttributeSet attrs) {
        super(context, attrs);
        mHolder=getHolder();
        mHolder.addCallback(this);
        //获得焦点
        setFocusable(true);
        setFocusableInTouchMode(true);
        //设置常量
        setKeepScreenOn(true);
    }

    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        isRunning=true;
        t=new Thread(this);
        t.start();
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
        isRunning=false;
    }

    @Override
    public void run() {
        //不断进行绘制
        while (isRunning){
            draw();
        }
    }

    private void draw() {
        try {
            mCanvas=mHolder.lockCanvas();
            if(mCanvas!=null){
                //draw something
            }
        } catch (Exception e) {
        }finally {
            if(mCanvas!=null)
            {
                mHolder.unlockCanvasAndPost(mCanvas);
            }
        }
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容