你好Android开发者!
Nota:帖子末尾的所有代码.
我希望只要其中一个子视图通过平滑展开动画变为可见,就可以为其设置动画.借助于LayoutTransition此扩展/折叠动画,没有任何问题.
但问题是动画ViewGroup是"复杂"的一部分LinearLayout.
此ViewGroup's高度设置为wrap_content另一个ViewGroup,在动画ViewGroup下方具有0dp高度,权重设置为1以适合屏幕上的所有剩余空间.
每当动画ViewGroup扩展时,由于垂直占用更多空间,底部ViewGroup应缩小以使顶部ViewGroup具有扩展所需的空间.我希望这个底部ViewGroup也能用动画缩小.
不起作用的是,ViewGroup当第一个动画ViewGroup开始时,底部会立即调整大小.我尝试将LayoutTransition对象添加到底部ViewGroup或全局根ViewGroup,但似乎没有什么可以解决问题.
有没有人设法做过这样的动画?我希望这与4.0兼容.(没有LayoutTransition.CHANGING然后...:s)
谢谢您的帮助 !
现在代码:
my_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/actionbar_height"
android:background="@drawable/bg_texture_black"
android:orientation="vertical">
<!-- This is the layout with the LayoutTransition instance -->
<LinearLayout
android:id="@+id/layout_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/dimen_margin_xlarge"
android:paddingRight="@dimen/dimen_margin_xlarge"
android:paddingTop="@dimen/dimen_margin_medium"
android:paddingBottom="@dimen/dimen_margin_medium"
android:background="@drawable/bg_black_gradient_to_top"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:textSize="@dimen/font_size_xxlarge"
android:text="@string/text_my_documents"/>
<!-- This is the layout with the extra content that is hidden/shown to trigger the animation -->
<RelativeLayout
android:id="@+id/layout_search_parameters"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dimen_margin_medium"
android:textColor="@android:color/white"
android:textSize="@dimen/font_size_medium"
android:text="TEST"/>
</RelativeLayout>
</LinearLayout>
<!-- The bottom layout that fit all the remaining space vertically -->
<LinearLayout
android:id="@+id/layout_central"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:background="@color/debug">
</LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
MyActivity.java:
// activity initialization is hidden. This method is triggered whenever the title is clicked. It open the extra layout in the header ViewGroup.
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void openSearchParametersView() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
LayoutTransition transitioner = new LayoutTransition();
transitioner.disableTransitionType(LayoutTransition.APPEARING);
transitioner.setStartDelay(LayoutTransition.APPEARING, 0);
transitioner.setStartDelay(LayoutTransition.DISAPPEARING, transitioner.getDuration(LayoutTransition.CHANGE_DISAPPEARING));
transitioner.setStartDelay(LayoutTransition.CHANGE_DISAPPEARING, 0);
headerViewGroup.setLayoutTransition(transitioner);
centralViewGroup.setLayoutTransition(new LayoutTransition()); // this does nothing :(
}
searchParametersView.setVisibility(View.VISIBLE);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
557 次 |
| 最近记录: |