Manteniendo una vista en la parte inferior con la biblioteca de SlidingUpPanel

Estoy utilizando la biblioteca de SlidingUpPanel en una de mis aplicaciones de Media Player .

En el panel de diapositivas, tengo los controles de medios y me gustaría mostrar la obra de arte de la pista en la parte superior. El problema que estoy teniendo es que quisiera que los controles de los medios permanezcan siempre en la parte inferior de la pantalla (incluso mientras que el usuario está arrastrando el panel, que significa que tengo que utilizar el método de onPanelSlide () ). Tal vez como un efecto de paralaje (no estoy seguro si ese es el nombre correcto). Esto es lo que tengo por ahora:

Colapsado / Expandido / Arrastrado:
Introduzca aquí la descripción de la imagen Introduzca aquí la descripción de la imagen Introduzca aquí la descripción de la imagen

Como se puede ver, mientras arrastre el panel, los controles se adhieren a la parte superior. Me gustaría que se pegue a la parte inferior de la pantalla y que las obras de arte muestran justo encima de ella.

Yo estaba pensando en CoordinatorLayout , pero no tengo ni idea de cómo funciona!

Mi código:

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> 

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> 

Por ahora, solo estoy revisando el estado del panel y ajustando la visibility la obra en consecuencia.

La actividad principal (MyListActivity.java)

Debe haber otra manera!

Primero, en onCreate de su actividad

 mLayout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout); 

A continuación, ajuste el estado del panel contraído.

  mLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); mLayout.setEnableDragViewTouchEvents(false); mLayout.setDragView(null); mLayout.setEnabled(false); mLayout.setClickable(false); 

Además, si el panel deslizante no está visible,

 mLayout.setPanelHeight(your panel height); 

Aquí your panel height valor de la your panel height debe ser entero. O incluso se puede hacer de forma dinámica como mLayout.setPanelHeight(your_drag_layout.getHeight()) ;

¡Entiendo! Brain no había estado trabajando durante los últimos días, supongo que lol. ¡Era simplemente Matemáticas sencillas!

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

Umm eso es muy específico de implementación. Tal vez usted puede hacer esto

  mLayout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout); mLayout.setDragView(findViewById(R.id.userInfoRoot)); mLayout.setPanelSlideListener(new SlidingUpPanelLayout.PanelSlideListener() { @Override public void onPanelSlide(View panel, float slideOffset) { Log.i(TAG, "onPanelSlide, offset " + slideOffset); } @Override public void onPanelExpanded(View panel) { Log.i(TAG, "onPanelExpanded"); mLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED); } @Override public void onPanelCollapsed(View panel) { Log.i(TAG, "onPanelCollapsed"); } @Override public void onPanelAnchored(View panel) { Log.i(TAG, "onPanelAnchored"); } @Override public void onPanelHidden(View panel) { Log.i(TAG, "onPanelHidden"); } }); 

Trate de envolver su listview y details_slide_bar dentro de RelativeLayout y cambie el LayoutParams dentro de onPanelExpanded y onPaanelCollapsed. A continuación se muestra un ejemplo de algunos de mis proyectos que utilizan esa biblioteca.

Activity_main.xml

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.nerdability.android.ArticleListActivity"> <com.sothree.slidinguppanel.SlidingUpPanelLayout xmlns:sothree="http://schemas.android.com/apk/res-auto" android:id="@+id/sliding_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom" sothree:umanoPanelHeight="?attr/actionBarSize" sothree:umanoShadowHeight="4dp" sothree:umanoDragView="@+id/dragView"> <!-- MAIN CONTENT --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="0dp" android:divider="?android:attr/dividerHorizontal" android:orientation="horizontal" android:showDividers="middle"> <LinearLayout android:id="@+id/toolbarContainer" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:minHeight="?attr/actionBarSize"> <include layout="@layout/toolbar"/> </LinearLayout> <LinearLayout android:layout_below="@id/toolbarContainer" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="0dp" android:layout_marginStart="0dp" android:divider="?android:attr/dividerHorizontal" android:baselineAligned="false" android:orientation="horizontal" android:showDividers="middle" tools:context=".ArticleListActivity" > <FrameLayout android:id="@+id/article_list" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1"/> </LinearLayout> </RelativeLayout> <!-- SLIDING LAYOUT --> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:clickable="false" android:focusable="true" android:id="@+id/dragView"> <ImageView android:id="@+id/img" android:layout_centerInParent="true" android:layout_marginTop="25dp" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <LinearLayout android:id="@+id/toolbar_view" android:layout_alignParentTop="true" android:layout_width="match_parent" android:background="@color/holo_blue_light" android:layout_height="?attr/actionBarSize" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:ellipsize="end" android:layout_gravity="center_vertical" android:layout_height="wrap_content" android:textSize="25sp" android:textColor="@color/white" android:paddingLeft="20dp" android:text="@string/app_name"/> </LinearLayout> <include android:id="@+id/player_view" android:layout_alignParentTop="true" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" layout="@layout/player" /> </RelativeLayout> </com.sothree.slidinguppanel.SlidingUpPanelLayout> </android.support.v4.widget.DrawerLayout> 

MainActivity.Java

 mLayout = (SlidingUpPanelLayout) findViewById(R.id.sliding_layout); mLayout.setPanelSlideListener(new SlidingUpPanelLayout.PanelSlideListener() { View playerView = (View) findViewById(R.id.player_view); View toolbarView = (View) findViewById(R.id.toolbar_view); @Override public void onPanelSlide(View panel, float slideOffset) { Log.i(TAG, "onPanelSlide, offset " + slideOffset); } @Override public void onPanelExpanded(View panel) { Log.i(TAG, "onPanelExpanded"); RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) playerView.getLayoutParams(); lp.removeRule(RelativeLayout.ALIGN_PARENT_TOP); lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE); playerView.setLayoutParams(lp); playerView.bringToFront(); } @Override public void onPanelCollapsed(View panel) { Log.i(TAG, "onPanelCollapsed"); RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) playerView.getLayoutParams(); lp.removeRule(RelativeLayout.ALIGN_PARENT_BOTTOM); lp.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); playerView.setLayoutParams(lp); playerView.bringToFront(); } @Override public void onPanelAnchored(View panel) { Log.i(TAG, "onPanelAnchored"); } @Override public void onPanelHidden(View panel) { Log.i(TAG, "onPanelHidden"); } }); 

Creo que deberías probar un diseño relativo. Si tienes un diseño relativo que llena toda la pantalla deberías poder usar android: layout_alignParentBottom para mover el botón a la parte inferior de la pantalla. Primero en el archivo de diseño y posicione el resto del diseño anterior con android: layout_above.

Creación de HEADER y FOOTER, aquí hay un ejemplo

[XML de diseño]

  • Pregunta de la sintaxis del principiante de Android / java
  • ¿Por qué está el menú desplegable de desbordamiento encima de la barra de acción?
  • Eclipse no reconoce el objeto Display
  • ¿Dónde está la ficha Pedido y exportación en Android Studio 2.x?
  • ¿Existe una mejor práctica aceptada para realizar solicitudes HTTP asíncronas en Android?
  • Estoy tratando de enviar datos con NXJ y Android Bluetooth
  • Best REST Client Framework / Utilidad en Android
  • ¿Cómo mostrar una barra de progreso cuando WebView carga una URL en Android?
  • Importar todas las importaciones en eclipse a la vez?
  • ¿Qué tan compatible es la implementación de Java de Android exactamente?
  • Android: adb shell, no se encontró ningún comando adb
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.