使用SlidingUpPanel库在底部保持视图

Aft*_*ain 11 java android android-layout

我在我的一个应用程序中使用该SlidingUpPanelMedia Player.

在幻灯片中,我有媒体控件,我想在顶部显示曲目的艺术作品.我遇到的问题是我希望媒体控件始终保持在屏幕的底部(即使用户拖动面板,这意味着我必须使用该onPanelSlide ()方法).也许像一个视差效果(不确定这是否是正确的名称).这就是我现在所拥有的:

折叠/展开/拖动:
在此输入图像描述 在此输入图像描述 在此输入图像描述

正如您所看到的,当我拖动面板时,控件会粘在顶部.我希望它坚持在屏幕的底部,并在其上方显示艺术品.

我在考虑CoordinatorLayout,但我不知道它是如何工作的!

我的代码:

activity.xml

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.sothree.slidinguppanel.SlidingUpPanelLayout
        android:id="@+id/sliding_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="bottom"
        sothree:umanoPanelHeight="92dp"
        sothree:umanoShadowHeight="4dp">

        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

        <include layout="@layout/details_slide_bar" />
    </com.sothree.slidinguppanel.SlidingUpPanelLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

details_slide_bar.xml

<LinearLayout
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:layout_gravity="bottom"
              android:orientation="vertical">

    <ImageView
        android:id="@+id/ivArtworkBar"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:visibility="gone"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="92dp"
        android:orientation="horizontal"
        android:id="@+id/lDetailsBar">

        /!-- Content of the detalBar !-->
    </RelativeLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

现在,我只是检查面板的状态并相应地调整图稿visibility.

主要活动(MyListActivity.java)

必须有另一种方式!

Mit*_*vro 5

首先,在onCreate你的活动

mLayout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout);
Run Code Online (Sandbox Code Playgroud)

然后设置面板状态折叠.

 mLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
 mLayout.setEnableDragViewTouchEvents(false);
 mLayout.setDragView(null);
 mLayout.setEnabled(false);
 mLayout.setClickable(false);
Run Code Online (Sandbox Code Playgroud)

此外,如果您的滑动面板不可见,那么

mLayout.setPanelHeight(your panel height);
Run Code Online (Sandbox Code Playgroud)

这里的your panel height值必须是整数.甚至你可以动态地做它 mLayout.setPanelHeight(your_drag_layout.getHeight());


Aft*_*ain 3

我得到了它!我猜大脑最近几天没有工作,哈哈。这只是简单的数学!

private SlidingUpPanelLayout slidingLayout;

@Ovverride
public void onCreate(Bundle bundle) {
    slidingLayout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout);

}

@Override
public void onPanelSlide(View panel, float slideOffset) {
    if (lDetails != null) {
        if (!varsInitialized) {
            relativeParams = (RelativeLayout.LayoutParams) lDetails.getLayoutParams();
            varsInitialized = true;
        }
        int adjustedMargin = slidingLayout.getHeight() - slidingLayout.getPanelHeight() - panel.getTop();
        relativeParams.setMargins(0, adjustedMargin, 0, 0);  // left, top, right, bottom
        lDetails.setLayoutParams(relativeParams);
    }
}
Run Code Online (Sandbox Code Playgroud)