在自定义的view中设置activity的控件

今天想要实现一个在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呢,不懂。。。还要继续努力啊



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值