今天想要实现一个在surfaceView中控制activity的其他控件的功能,例如控制activity中的按钮的显现,开始时按钮A时不可见的,当surfaceView达到一定要求后,将按钮显示。
试了三种方法,发现只有两种可以实现
第一种,在surfaceView中利用Inflater来获取layout对象的View,然后通过这个View来得到按钮对象,这个想法失败了,调试发现能够获取inflater对象,但是获取layout对象时将出现异常。
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.play, null);//play.xml 为设置activity时的View
分析了一下:
最开始觉得应该在surfaceView中获取的layout对象和在activity中设置的layout对象应该并非一个。而且setContentView参数为xml,无法实现动态改变,由于这里我不知道如果在surfaceView中获取他的activity中setContentView的参数,所以第一种方法就在此夭折了(原谅我只是个新手)。
第二种,很简单,在activity中将view传给surfaceView对象,例如
LayoutInflater pl = getLayoutInflater();
View view = pl.inflate(R.layout.play, null);
setContentView(view);
newSurfaceView gl =(newSurfaceView)findViewById(R.id.mysurf);
gl.setit(num,view);
第三种,更简单,在activity中设置一个静态方法,当surfaceView满足条件时,调用这个静态方法,他的缺点是必须将按钮也设置为静态的。。。(看情况了,反正我觉得不怎么好)
总的来说,我偏向于第二种方法,不是很明白findViewById与LayoutInflater获取的View的却别,http://www.eoeandroid.com/thread-2244-1-1.html,的地板说
通过LayoutInflater生成的对象是clone出来的,出来一个对象就是一个对象,每个之间无联系,findViewById出来的都是同一个对象
但是如果是这样的话 那么我上面的通过
newSurfaceView gl =(newSurfaceView)findViewById(R.id.mysurf);
这里获取的surfaceView为什么可以直接控制上面的view中的surfaceView呢,不懂。。。还要继续努力啊