我开始开发一个应用程序,使用叠加服务在手机上显示实用侧边栏。我的做法是在屏幕右侧添加一个小箭头,当用户滑过它时,侧边栏出现。这个方法在Jelly Bean之前没有问题。从JB开始,显示侧边栏的整个过程开始变得动画化。如果它不到处都在动画,那将会非常酷。我用的方法是像下面这样的简单updateViewLayout命令来显示和隐藏侧边栏。
这段代码可以隐藏侧边栏。handlesize变量是手柄的宽度。wm变量是窗口管理器。因此,我只显示手柄的宽度,使得手柄旁边的任何其他内容(例如侧边栏)都不可见。我还使用WRAP_CONTENT来设置高度,以确保仅有手柄所占用的区域吸收触摸事件,以免阻挡屏幕右侧的整个区域无法注册触摸事件。
这是显示侧边栏的代码。整个视图的宽度设置为WRAP_CONTENT,以显示所有内容,高度设置为MATCH_PARENT,因为侧边栏在可见时是全高度。
通常情况下,此代码应立即在一个宽度和高度设置之间切换到另一个宽度和高度设置,中间没有任何变化。但自Jelly Bean以来,这种切换开始通过一些奇怪的动画进行。我不确定,但可能与Project Butter有关。
在下面的链接中,您可以看到动画的一些帧。
所以我的问题是,你有什么想法可以阻止这种行为,或者更好的是,利用它来使侧栏执行一些平滑的动画,但以适用于Android 2.2及以上的方式?
非常感谢!
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
handlesize, WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.RIGHT|Gravity.CENTER_VERTICAL;
wm.updateViewLayout(mOverlay, params);
handleButton.setImageResource(R.drawable.handle);
isCompact=true;
这段代码可以隐藏侧边栏。handlesize变量是手柄的宽度。wm变量是窗口管理器。因此,我只显示手柄的宽度,使得手柄旁边的任何其他内容(例如侧边栏)都不可见。我还使用WRAP_CONTENT来设置高度,以确保仅有手柄所占用的区域吸收触摸事件,以免阻挡屏幕右侧的整个区域无法注册触摸事件。
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.RIGHT|Gravity.CENTER_VERTICAL;
wm.updateViewLayout(mOverlay, params);
handleButton.setImageResource(R.drawable.handle_back);
isCompact=false;
这是显示侧边栏的代码。整个视图的宽度设置为WRAP_CONTENT,以显示所有内容,高度设置为MATCH_PARENT,因为侧边栏在可见时是全高度。
通常情况下,此代码应立即在一个宽度和高度设置之间切换到另一个宽度和高度设置,中间没有任何变化。但自Jelly Bean以来,这种切换开始通过一些奇怪的动画进行。我不确定,但可能与Project Butter有关。
在下面的链接中,您可以看到动画的一些帧。
http://i.stack.imgur.com/QzZGO.png
如果我将视图的高度设置为MATCH_PARENT,即使关闭,动画也只在水平平面上进行,从右到左,看起来很好。但问题是我不想阻塞屏幕右侧的整个区域。其他应用程序中有很多从右侧滑动的用途,可能在服务下运行,例如在Chrome中切换选项卡。所以我的问题是,你有什么想法可以阻止这种行为,或者更好的是,利用它来使侧栏执行一些平滑的动画,但以适用于Android 2.2及以上的方式?
非常感谢!