網(wǎng)上怎樣做電纜網(wǎng)站如何做地推推廣技巧
相信很多Android開發(fā)者都知道Canvas類是UI的畫布(雖然這種說法并不嚴謹),因為我們在Canvas上完成各種圖形的繪制,那么我們Activity上的各種交互控件又是如何展示并渲染到屏幕上的呢,所以在另一個層面上也有一個“畫布”角色——Surface,接下來我們將一起揭開其神秘面紗。
Surface 是Android系統(tǒng)中真正的畫布,Activity上的所有UI都是在Surface 上完成繪制的,每一個Surface 對象都在SurfaceFlinger中有對應(yīng)的圖層(Layer),SurfaceFlinger 負責(zé)把這些Layer按需混合處理后輸出到Frame Buffer中,再由Display設(shè)備(屏幕或顯示器)把Frame Buffer里的數(shù)據(jù)呈現(xiàn)到屏幕上。
Android 進階——圖形系統(tǒng)的另一種“畫布” Surface 詳解_android surface繪制-CSDN博客
canvas怎么來的,canvas是由surface創(chuàng)建的
在ViewRootImpl調(diào)用view的draw方法之前創(chuàng)建的
Android Canvas的由來 - 簡書
在調(diào)用draw之前會先創(chuàng)建Canvas對象private boolean drawSoftware(Surface surface, AttachInfo attachInfo, int xoff, int yoff,boolean scalingRequired, Rect dirty) {final Canvas canvas;try { //使用Surface創(chuàng)建一個Canvas,方法中也是調(diào)用了native方法 anvas = mSurface.lockCanvas(dirty);if (left != dirty.left || top != dirty.top || right != dirty.right|| bottom != dirty.bottom) {attachInfo.mIgnoreDirtyState = true;}canvas.setDensity(mDensity);}catch (Surface.OutOfResourcesException e) {handleOutOfResourcesException(e);return false;} catch (IllegalArgumentException e) {mLayoutRequested = true; // ask wm for a new surface next time.return false;}....try {canvas.translate(-xoff, -yoff);if (mTranslator != null) {mTranslator.translateCanvas(canvas);}canvas.setScreenDensity(scalingRequired ? mNoncompatDensity : 0);attachInfo.mSetIgnoreDirtyState = false;//調(diào)用View的draw方法,并傳入剛剛創(chuàng)建的Canvas對象mView.draw(canvas);drawAccessibilityFocusedDrawableIfNeeded(canvas);} finally {if (!attachInfo.mSetIgnoreDirtyState) {// Only clear the flag if it was not set during the mView.draw() callattachInfo.mIgnoreDirtyState = false;}}....}