[Android] SurfaceView 템플릿

2045 단어
SurfaceView extends View 사실 View는 UI 스레드에서 그리는 것입니다. SurfaceView는 하위 스레드에서 자신을 그리는 것입니다. 장점: UI 스레드가 막히지 않도록 합니다. 저희 SurfaceView에는 그리기 위한 Surface가 포함되어 있습니다. Surface에는 Canvas가 포함되어 있는데 어떻게 Canvas를 얻습니까?getHolder->SurfaceHolder holder->Canvas + SurfaceView의 생명주기 관리surfaceCreatedsurfaceChangedsurfaceDestroyed
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);
            }
        }
    }
}

좋은 웹페이지 즐겨찾기