我想要一个带有动画的底部视图来填充半屏。在那个视图中,我会有很多ImageButtons。 我可以将动画从下半屏编程到一半,但是之后,我的视图将填满整个屏幕。
我想要什么:
我所拥有的:
xml代码:
<android.support.v4.widget.DrawerLayout
android:id="@+id/screen_dashboard" style="@style/drawer"
tools:openDrawer="start">
(...)
<TableLayout
android:id="@+id/hidden_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:visibility="gone" >
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:onClick="slideUpDown" />
<ImageButton
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:onClick="slideUpDown" />
</TableRow>
</TableLayout>
</android.support.v4.widget.DrawerLayout>
Java代码:
public void slideUpDown(final View view) {
if (!isPanelShown()) {
// Show the panel
Animation bottomUp = AnimationUtils.loadAnimation(this, R.animator.bottom_up);
hiddenPanel.startAnimation(bottomUp);
hiddenPanel.setVisibility(View.VISIBLE);
}
else {
// Hide the Panel
Animation bottomDown = AnimationUtils.loadAnimation(this, R.animator.bottom_down);
hiddenPanel.startAnimation(bottomDown);
hiddenPanel.setVisibility(View.GONE);
}
}
private boolean isPanelShown() {
return hiddenPanel.getVisibility() == View.VISIBLE;
}
有人知道半屏显示我该怎么办吗?
答案 0 :(得分:1)
使用 BottomSheet Android组件可以轻松实现这种实现。
有两种类型的 BottomSheets , Persistent 和 Modal 底表。
1。永久底页
“持久”底页显示应用内内容。它会显示在屏幕底部,使部分内容可见。激活后,它将打开全部内容。永久性底部工作表的标高与应用程序相同,因此成为应用程序的一部分。以下是Google Maps应用持久性底部表格的示例。
2。模态底页
模态底板比应用程序具有更高的高度。这些通常替换菜单或对话框。通常是模态底页,用于显示其他应用程序的深层链接内容。以下是Google云端硬盘应用的底部模式示例。
BottomSheet的示例代码段:
View bottomSheet = findViewById(R.id.bottom_sheet);
behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
// React to state change
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// React to dragging events
}
});
要展开BottomSheet:
behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
要折叠BottomSheet:
behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
根据您的需要,您可以选择BottomSheet以上的任何类型。希望这有助于解决您的问题。
答案 1 :(得分:0)
使用底页对话框片段。默认情况下,这将从底部开始动画,并从底部开始获取所需大小的片段。您无需为动画编写额外的代码。
答案 2 :(得分:0)
有两种可以满足您需求的快速解决方案:
1)BottomSheet。您可以使用app:behavior_peekHeight
在展开状态下配置此视图的高度。
2)MotionLayout。在这种情况下,您将能够配置状态之间的优美过渡。此外,认为可以将底视图上方的动画设置为随底视图过渡。 但是它仍然处于alpha状态。因此它可能包含错误,并且在将来的版本中api可能会发生重大变化。