Android 5.0下SlidingMenu和Cocos2dx一起使用引起的一个奇怪的绘制bug的解决办法

公司的用户认证SDK项目接了游戏工程在Android 5.0.1系统下测试时出现了一个bug:

使用了SlidingMenu的那个Activity的控件(包括Fragment里的和SlidingMenu里的),会出现问题。具体的表现为ListView的列表项和按钮等点击之后没有看到响应点击的背景色;EditText点击后没看到光标,输入一些字符串后没有显示在EditText里,但滑动一下SlidingMenu后就能显示出字符串了。

经过分析测试,这个bug只有在Android 5.0系统下,并且同时使用SlidingMenu和Cocos2dx的项目才会出现。这个项目在Android 5.0以下的系统运行正常,没有这个bug。而在Android 5.0系统环境,如果不接入Cocos2dx工程,只用SDK的demo跑也正常。

我本以为是焦点的获取问题,但通过Activity.getCurrentFocus()方法是有得到各个控件的焦点的,且点击的事件也有响应。于是去分析SlidingMenu的源码,发现是以下代码的问题。

	@TargetApi(Build.VERSION_CODES.HONEYCOMB)
	public void manageLayers(float percentOpen) {
		if (Build.VERSION.SDK_INT < 11) return;

		boolean layer = percentOpen > 0.0f && percentOpen < 1.0f;
		final int layerType = layer ? View.LAYER_TYPE_HARDWARE : View.LAYER_TYPE_NONE;

		if (layerType != getContent().getLayerType()) {
			mHandler.post(new Runnable() {
				public void run() {
					Log.v(TAG, "changing layerType. hardware? " + (layerType == View.LAYER_TYPE_HARDWARE));
					getContent().setLayerType(layerType, null);
					getMenu().setLayerType(layerType, null);
					if (getSecondaryMenu() != null) {
						getSecondaryMenu().setLayerType(layerType, null);
					}
				}
			});
		}
	}

上面这段代码是在SlidingMenu类的 最底部,主要的功能是在Android 3.0以上的系统启用硬件加速去绘制滑动的效果。

我推测在Android 5.0系统下,该代码可能和Cocos2dx的绘制冲突了。

解决的办法很简单

if (Build.VERSION.SDK_INT < 11) return;

改成

if (Build.VERSION.SDK_INT < 11 || Build.VERSION.SDK_INT > 20) return;


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值