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);
相關文章
- Feign 呼叫丟失Header的解決方案Header
- SAP Cloud for Customer的CTI呼叫中心解決方案Cloud
- MATLAB呼叫NASTRAN的連續計算解決方案MatlabAST
- 在Flutter中嵌入Native元件的解決方案Flutter元件
- 微信小程式元件化的解決方案微信小程式元件化
- 評價打分元件,SVG 半顆星的解決方案!元件SVG
- 原生Js呼叫Fetch Api請求介面(新的Ajax解決方案)JSAPI
- 單元件多UI形態的終極解決方案(React)元件UIReact
- tkinter 元件 的 只能驗證一次的問題的的解決方案.元件
- .NET混合開發解決方案10 WebView2控制元件呼叫網頁JS方法WebView控制元件網頁JS
- 基於Vue構造器建立Form元件的通用解決方案VueORM元件
- dav url prams與元件掛載的集幾種解決方案元件
- webpack+jquery 元件化、模組化開發的解決方案WebjQuery元件化
- Android加殼過程中mprotect呼叫失敗的原因及解決方案Android
- 解決介面呼叫的provisional headers are shownHeader
- 小程式解決方案 Westore - 元件、純元件、外掛開發元件
- Feign客戶端呼叫服務時丟失Header引數的解決方案客戶端Header
- SurfaceViewView
- iOS元件化解決方案iOS元件化
- 解決 flutter module 中 .android 和 .ios 目錄不被覆蓋的問題FlutterAndroidiOS
- [開源] Min – 小程式自定義元件解決方案元件
- vue 父子元件的方法呼叫Vue元件
- 親測有用的解決方案
- 不同解決方案的比較
- 探索ABP的EventHub解決方案
- Jou 的解決方案系列:序言
- 前端跨域的解決方案前端跨域
- 人工智慧的解決方案人工智慧
- 佈局的常用解決方案
- mpvue使用sass的解決方案Vue
- mpvue 使用sass的解決方案Vue
- 分散式鎖的解決方案分散式
- 浮動坍塌的解決方案
- 在datatable中載入easyui控制元件時,draw操作很慢的解決方案UI控制元件
- vue子元件怎麼呼叫父元件的方法Vue元件
- hooks父元件怎麼呼叫子元件的方法?Hook元件
- React 中 呼叫 lodash.debounce 不錯誤繫結 this 解決方案React
- 安卓 Surfaceview 的截圖的問題安卓View