SurfaceCreated不调用的解决方法


因为要为外面封包一个aar包,把一个摄像头的显示控件略微封装了一下,在没有封装的情况下,程序可以正常的跑起来。但是在打好包后用测试程序调用这个包,发现不显示图像。打了个日志比较了一下,发现正常的程序里是调用SurfaceCreated这个函数的,但是在aar包里却不调用这个函数。

而一些初始化的程序就放在这个函数里呢,没有它,当然图像不会显示出来。一开始怀疑是程序的原因,就把包里的许多代码都注释掉了。几乎是和可运行的应用程序是一致的(不打包的应用程序)。可是还是不行。

后来抱着试试看的想法在网上查,发现还真有好多人都遇到了这种情况,发现了几种方法,但是都不能解决问题:

比如有人说在构造函数里增加:

                   holder= getHolder();

                   holder.addCallback(this);

这里的程序里本来就有这个,所以这个是没有意义。还有的说里面写一个其它的子控件的方法,这个也没试,因为不知道写哪个子控件。

 

后来发现有一个网友说要动态增加这个View:

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       cpv = new CameraPreview(MainActivity.this);

       setContentView(R.layout.activity_main);

       FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(600,480);

       params.gravity = Gravity.CENTER;

       addContentView(cpv,params);

}

好的,试用了一下,果然OK。

后来又在百度发现有网友说如下原因:“你看看的布局是否是fill_parent,把surfaceview给挤出屏幕了。我的就是这样”,看了一下,原来还真是用的fill_parent:

                   android:id="@+id/view_ca"

       android:layout_width="fill_parent"

       android:layout_height="0dip"

                   android:layout_weight="1"

那就按人家说得,改成指定大小,简单起见:

       android:layout_width="600dp"

        android:layout_height="480dp"

然后调用改用:

cpv = (CameraPreview) findViewById(R.id.view_ca);

果然也好了,这也是醉了。水平真是太菜了。

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值