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);

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

 

 

你可能感兴趣的:(Android)