繁体   English   中英

从底部到半屏查看

[英]View from the bottom to half screen

我想要一个来自底部的 View 和 Animation 来填充半个屏幕。 在那个视图中,我会有很多 ImageButton。 我可以从底部到半屏对动画进行编程,但之后我的视图将填满整个屏幕。

我想要的是:

在此处输入图片说明

我拥有的:

在此处输入图片说明

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;
    }

有谁知道我可以为我的视图做些什么只填满半屏?

使用BottomSheet Android 组件可以轻松实现这种实现。

有两种类型的BottomSheetsPersistentModal Bottom Sheet。

1. 持久底片

Persistent 底部工作表显示应用内内容。 它将显示在屏幕底部,使部分内容可见。 激活后,它会打开完整内容。 持久底部工作表的高度与应用程序相同,使其成为应用程序的一部分。 以下是 Google Maps 应用程序持久性底部工作表的示例。

在此处输入图片说明

2. 模态底片

模态底部工作表的高度高于应用程序。 这些通常替换菜单或对话框。 通常用于显示来自其他应用程序的深层链接内容的模态底部工作表。 以下是 Google Drive 应用程序模态底部表单的示例。

在此处输入图片说明

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 之上的任何类型。 希望这有助于解决您的问题。

使用底部工作表对话框片段。 默认情况下,这将从底部开始动画并从底部获取所需的片段大小。 您不需要为动画编写额外的代码。

BottomSheetDialogFragment

有 2 种快速解决方案可以满足您的需求:

1) 底片 您可以使用app:behavior_peekHeight在展开状态下配置此视图的高度。

2) 运动布局 在这种情况下,您将能够在状态之间配置漂亮的过渡。 此外,可以将上面的底视图动画化为与底视图一起过渡。 但它仍处于 alpha 阶段。 因此它可能包含错误,并且 api 可以在未来版本中进行重大更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM