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);
surfaceview组件的surfaceCreated()不被调用的解决方案的更多相关文章
- Flex自定义组件、皮肤,并调用
		
标签:Flex 自定义组件 自定义皮肤 主应用调用模块 本程序样例学习自flex 实战教程.但因原教程代码不全,且根据个人需求有更改. 1文件列表 自定义as类Reveal.as,该类实现组件的 ...
 - Python的扩展接口[2] -> 动态链接库DLL[1] -> 组件对象模型 COM 的 Python 调用
		
组件对象模型 COM 的 Python 调用 关于COM的基本概念,可参考组件对象模型 COM的内容,下面主要介绍两种使用 Python 调用 COM 组件的方法. 1 使用 win32com 1.1 ...
 - vue 组件内 directives指令的调用方式 <base-table v-auto-height:tableHeight="{vm:this, diffHeight:ahTable.diffHeight}"
		
vue 组件内 directives指令的调用方式 <base-table v-auto-height:tableHeight="{vm:this, diffHeight:ahTabl ...
 - vue刷新当前路由:router-view 复用组件时不刷新的3种解决方案总结
		
vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用.vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来.传统的页面应 ...
 - atitit.线程死锁 卡住无反应 的原因in cmd调用的解决方案  v3 q39
		
atitit.线程死锁 卡住无反应 的原因in cmd调用的解决方案 v3 q39 1. 问题::线程死锁 卡住无反应1 1.1. 分类:: cmd调用, net io , file io ...
 - 「Vue」父子组件之间的传值及调用方法
		
a.父组件向子组件传值data(){},props数据区别data中的数据可读可写,是自己的数据props是个数组,中的数据是父组件传递过来的,只读不能写<login :dmsg='msg'&g ...
 - C#创建COM组件供VB,PB,Delphi调用
		
1 COM组件概述 COM是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术.在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成 ...
 - vue 父子组件传值以及方法调用,平行组件之间传值以及方法调用大全
		
vue项目经常需要组件间的传值以及方法调用,具体场景就不说了,都知道.基本上所有的传值都可以用vuex状态管理来实现,只要在组件内监听vuex就好. vue常用的传值方式以及方法有: 1. 父值传子( ...
 - 创建最简单的exe形式COM组件并在MFC程序调用
		
来新公司学习接手新项目,拿到代码打开解决方案看到里面竟然有40几个工程,有点吃惊.具体看代码也有很多之前没见过的写法,上了几天火. 有件事就没太搞明白,按照文档的说法上层很多软件都要调用IO服务器,但 ...
 
随机推荐
- linux下创建一个可执行脚本
			
1.touch hello.sh 2.vim hello.sh 键入i 插入#!/bin/sh echo hello world; 键入: esc : ...
 - https://sourceware.org/gdb/onlinedocs/gdb/Forks.html
			
https://sourceware.org/gdb/onlinedocs/gdb/Forks.html Next: Checkpoint/Restart, Previous: Threads, Up ...
 - Android 自定义View——自定义点击事件
			
每个人手机上都有通讯录,这是毫无疑问的,我们通讯录上有一个控件,在通讯录的最左边有一列从”#”到”Z”的字母,我们通过滑动或点击指定的字母来确定联系人的位置,进而找到联系人.我们这一节就通过开发这个控 ...
 - [Django] Creating an app, models and database
			
To add a new app, first cd to the project. Then run: python manage.py startapp scrumboard After that ...
 - UIApplicationsharedApplication的详解
			
iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *a ...
 - 到底有多少种智能指针(smart pointer)
			
最近Qt的blog总结了到底有多少种smart pointer, 下面是一个简要的介绍: 1. QPointer :提供对指针的保护,当一个指针被删除以后,再使用不会造成野指针或者指针溢出.比如 ...
 - 【64.22%】【codefoces round 382A】Ostap and Grasshopper
			
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
 - wpf中xaml的类型转换器与标记扩展
			
原文:wpf中xaml的类型转换器与标记扩展 这篇来讲wpf控件属性的类型转换器 类型转换器 类型转换器在asp.net控件中已经有使用过了,由于wpf的界面是可以由xaml组成的,所以标签的便利也需 ...
 - 机器学习: t-Stochastic Neighbor Embedding 降维算法 (二)
			
上一篇文章,我们介绍了SNE降维算法,SNE算法可以很好地保持数据的局部结构,该算法利用条件概率来衡量数据点之间的相似性,通过最小化条件概率 pj|i 与 pi|j 之间的 KL-divergence ...
 - Mybatis使用TypeHandler实现数据的加解密转换
			
参考: MyBatis之TypeHandler: https://www.cnblogs.com/yulinfeng/p/5991170.html 前段时间收到这么个需求:为安全起见,要求在数据库 ...