我想出了一个解决方案…我不知道它是否完美,但效果很好。
因此,我要做的是将一个单独的frameLayout堆叠在一起,然后将顶部布局动画化,使其滑动到屏幕右侧(只需要调用slideTo或scrollBy。基本上就是这样!非常简单有效!(虽然代码不是很漂亮:P)
编辑:
一些代码示例。
<?xml version="1.0" encoding="utf-8"?><frameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFF" > <include android:id="@+id/menu_layout" layout="@layout/menu_list" android:visibility="invisible"/> <include android:id="@+id/news_list_parent" layout="@layout/main_news_list" /></frameLayout>
这是布局xml,非常简单。包含的.xml是带有标题和列表视图的简单LinearLayouts。
“魔术”发生在动画中:
protected void applyTransformation(float interpolatedTime, Transformation t) { int newOffset; if(expanded) { newOffset = 0; newOffset = (int)(endOffset*(1-interpolatedTime)); } else { newOffset = (int)(endOffset*(interpolatedTime)); } view.scrollTo(-newOffset, 0);}endOffset是目标运动。我在开始动画之前进行了设置,然后将要设置动画的视图(在这种情况下为id =
news_list_parent的视图)设置在构造函数上。
但是仅仅为了了解它是如何工作的,就制作一个按钮,它的监听者会做这样的事情:
if(viewBeneath.getVisibility() == View.INVISIBLE) { viewBeneath.setVisibility(View.Visible); viewToSlide.slideTo(-(width-50), 0);}最后覆盖后退按钮以执行按钮的相反操作
if(viewBeneath.getVisibility() == View.VISIBLE) { viewToSlide.slideTo(0, 0); viewBeneath.setVisibility(View.Visible);}将此读为伪代码=)这是我一开始所做的,但是代码丢失了:P



