SurfaceView和View的區(qū)別

SurfaceView是一個(gè)專(zhuān)門(mén)用于做頻繁繪制的View子類(lèi),它的繪制操作是在子線程中執(zhí)行,所以頻繁繪制不會(huì)阻塞線程,使用它去做一些需要頻繁繪制和長(zhǎng)時(shí)間繪制效果會(huì)高很多。而如果這種操作放入到View中去做的話就不合適了,首先View的刷新UI操作都是需要在UI線程中,也就是我們的主線程中。如果去執(zhí)行一些需要長(zhǎng)時(shí)間繪制,就會(huì)造成UI阻塞造成無(wú)法響應(yīng)其他時(shí)間

使用過(guò)程
surfaceCreated
創(chuàng)建時(shí)調(diào)用,如果View隱藏或者activity onResume方法也會(huì)重新調(diào)用。

surfaceChanged
surfaceCreated 后調(diào)用

surfaceDestroyed
view隱藏或者銷(xiāo)毀時(shí)調(diào)用

SurfaceHolder mHolder = getHolder();
獲取一個(gè)holder獲取canvas和提交canvas

Canvas canvas = mHolder.lockCanvas();
獲取canvas做繪制操作

mHolder.unlockCanvasAndPost(canvas);
提交繪制操作

public class DrawingBoardView extends SurfaceView implements SurfaceHolder.Callback, Runnable {
   
    public DrawingBoardView(Context context) {
        this(context, null);
    }


    public DrawingBoardView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }


    public DrawingBoardView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    private void initData() {
        mHolder = getHolder();
        getBackground().setAlpha(127);
        setZOrderMediaOverlay(true);
        setZOrderOnTop(true);
        mHolder.setFormat(PixelFormat.TRANSLUCENT);
        mHolder.unlockCanvasAndPost(canvas);
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {

    }


    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    }


    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        mIsRuning = false;
    }


    @Override
    public void run() {
    }

    
    private void drawPattern(int x, int y) {
        //繪制過(guò)程
        Canvas canvas = mHolder.lockCanvas();
        Canvas newCanvas = new Canvas(mDrawBitmap);
        canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
        canvas.drawBitmap(mDrawBitmap, 0, 0, mPaint);
        mHolder.unlockCanvasAndPost(canvas);
    }


}

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容