surfaceview元件的surfaceCreated()不被呼叫的解決方案
原文:surfaceview元件的surfaceCreated()不被呼叫的解決方案
有時候我們有需要在native層做在surfaceview的上下文中做渲染,這個時候只是提供了一個單獨什麼都不做的surfaceview。
xml檔案如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.buffer.mirror2.MirrorActivity" > <com.buffer.mirror2.MirrorSurfaceView android:id="@+id/MirrorSurfaceView" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
surfaceview檔案的如下:
public class MirrorSurfaceView extends SurfaceView implements Runnable, SurfaceHolder.Callback { public MirrorSurfaceView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void run() { while(true){ if(getHolder().getSurface().isValid()){ //Canvas canvas = getHolder().lockCanvas(); renderFrame(this.getHolder().getSurface()); //getHolder().unlockCanvasAndPost(canvas); } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } @Override public void surfaceCreated(SurfaceHolder holder) { initRender(this.getWidth(), this.getHeight()); new Thread(this).start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub } private native void initRender(int render_width, int render_height); private native void renderFrame(Surface surface); }
出現的結果是因為java層認為surfaceview什麼都沒有做,於是不會做任何初始化操作,也就是surfaceCreated()不會被呼叫。這個時候怎麼解決呢?
有兩個辦法可以解決:
1. 在surfaceview裡面手動去新增一個子控制元件,以觸發surfaceview做懶初始化。但是這樣做有時候會因為我的所有渲染邏輯是在native,有些拖泥帶水不乾淨。
2. 在surfaceview的建構函式裡面加入這句話也可以解決:
getHolder().addCallback(this);
相關文章
- 解決onConfigurationChanged不被呼叫
- Vue 元件通訊的解決方案Vue元件
- 如何使程式不被360軟體Kill掉?(解決方案)
- 微信小程式元件化的解決方案微信小程式元件化
- Feign 呼叫丟失Header的解決方案Header
- js實現的跨域呼叫flash解決方案JS跨域
- ajax呼叫,action返回的中文為亂碼的解決方案
- SAP Cloud for Customer的CTI呼叫中心解決方案Cloud
- 在Flutter中嵌入Native元件的解決方案Flutter元件
- MATLAB呼叫NASTRAN的連續計算解決方案MatlabAST
- 評價打分元件,SVG 半顆星的解決方案!元件SVG
- webpack+jquery 元件化、模組化開發的解決方案WebjQuery元件化
- 單元件多UI形態的終極解決方案(React)元件UIReact
- .NET混合開發解決方案10 WebView2控制元件呼叫網頁JS方法WebView控制元件網頁JS
- tkinter 元件 的 只能驗證一次的問題的的解決方案.元件
- 原生Js呼叫Fetch Api請求介面(新的Ajax解決方案)JSAPI
- 基於Vue構造器建立Form元件的通用解決方案VueORM元件
- dav url prams與元件掛載的集幾種解決方案元件
- 小程式解決方案 Westore - 元件、純元件、外掛開發元件
- SurfaceViewView
- JavaScript呼叫App原生程式碼(iOS、Android)解決方案JavaScriptAPPiOSAndroid
- iOS元件化解決方案iOS元件化
- 由於navigation引起viewwillappear不被呼叫NavigationViewAPP
- Android加殼過程中mprotect呼叫失敗的原因及解決方案Android
- [開源] Min – 小程式自定義元件解決方案元件
- [開源] Min - 小程式自定義元件解決方案元件
- 關於vb自定義控制元件中引用mediaplayer控制元件出錯的解決方案控制元件
- asp.net 呼叫echarts顯示圖表控制元件隨瀏覽器自適應解決方案ASP.NETEcharts控制元件瀏覽器
- 安卓 Surfaceview 的截圖的問題安卓View
- Jou 的解決方案系列:序言
- 分散式鎖的解決方案分散式
- 佈局的常用解決方案
- mpvue使用sass的解決方案Vue
- mpvue 使用sass的解決方案Vue
- 前端跨域的解決方案前端跨域
- 探索ABP的EventHub解決方案
- 人工智慧的解決方案人工智慧
- 浮動坍塌的解決方案