Tengo un diseño oculto a la vista. Al hacer clic en un botón, quiero que se deslice hacia arriba desde la parte inferior empujando todo el contenido de la pantalla hacia arriba, muy similar a cómo WhatsApp muestra el panel de emoticonos en la pantalla de chat.
He visto SlidingDrawer, eso no funciona para mí. Requiere una imagen como asa que se muestra en el centro de la pantalla, no quiero eso. También se desliza sobre el contenido de la pantalla existente. Estoy buscando una forma de mover el contenido existente hacia arriba.
Actualización 1:
Intenté usar las animaciones sugeridas por Sanket Kachhela. Pero el diseño oculto nunca se muestra. Aquí está el código.
Diseño (activity_main.xml):
<RelativeLayout
android:id="@+id/main_screen"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:layout_alignParentTop="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:layout_centerInParent="true"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Slide up / down"
android:layout_alignParentBottom="true"
android:onClick="slideUpDown"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/hidden_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/main_screen">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />
</RelativeLayout>
Actividad (MainActivity.java):
package com.example.slideuplayout;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
public class MainActivity extends Activity {
private ViewGroup hiddenPanel;
private boolean isPanelShown;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hiddenPanel = (ViewGroup)findViewById(R.id.hidden_panel);
hiddenPanel.setVisibility(View.INVISIBLE);
isPanelShown = false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void slideUpDown(final View view) {
if(!isPanelShown) {
// Show the panel
Animation bottomUp = AnimationUtils.loadAnimation(this,
R.anim.bottom_up);
hiddenPanel.startAnimation(bottomUp);
hiddenPanel.setVisibility(View.VISIBLE);
isPanelShown = true;
}
else {
// Hide the Panel
Animation bottomDown = AnimationUtils.loadAnimation(this,
R.anim.bottom_down);
hiddenPanel.startAnimation(bottomDown);
hiddenPanel.setVisibility(View.INVISIBLE);
isPanelShown = false;
}
}
}
Animaciones:
bottom_up.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="75%p"
android:toYDelta="0%p"
android:fillAfter="true"
android:duration="500" />
</set>
bottom_down.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="0%p"
android:toYDelta="100%p"
android:fillAfter="true"
android:interpolator="@android:anim/linear_interpolator"
android:duration="500" />
</set>
¿Alguna idea de cómo se puede hacer esto?
Gracias.
hiddenPanel.bringToFront()
antes de comenzar la animación y vea si funciona. Háganos saber también, ¿está obteniendo la vista hidden_panel en diseño gráfico paraactivity_main.xml
?Respuestas:
Utilice estas animaciones:
bottom_up.xml
bottom_down.xml
Use este código en su actividad para ocultar / animar su vista:
fuente
.setVisibility(View.VISIBLE)
me salvó el día!Estabas cerca. La clave es que el diseño oculto se infle
match_parent
tanto en altura como en peso. Simplemente comience comoView.GONE
. De esta forma, usar el porcentaje en los animadores funciona correctamente.Diseño (activity_main.xml):
Actividad (MainActivity.java):
Solo otra cosa que cambié fue
bottom_up.xml
. En vez deSolía:
Pero eso es una cuestión de preferencia, supongo.
fuente
android:zAdjustment="top"
suAnimation
oAnimtionSet
.Solo necesita agregar alguna línea en su aplicación, encuéntrela en el siguiente enlace:
Mostrar y ocultar una vista con una animación de diapositivas hacia arriba / abajo
Simplemente agregue una animación a su diseño de esta manera:
fuente
Esto es lo que funcionó al final para mí.
Diseños:
activity_main.xml
hidden_panel.xml
Java: paquete com.example.slideuplayout;
fuente
Utilice este diseño. Si desea animar la reducción de la vista principal, deberá agregar animación a la altura de la barra oculta, comprarla puede ser lo suficientemente buena como para usar la animación de traducción en la barra y hacer que la altura de la vista principal salte en lugar de animar.
fuente
Ok, hay dos enfoques posibles. El más simple es usar una biblioteca de menú deslizante . Permite crear un menú deslizante inferior, puede animar el contenedor superior para hacer visible la parte inferior, admite tanto arrastrarlo con el dedo como animarlo mediante programación mediante el botón (StaticDrawer).
Manera más difícil: si desea utilizar animaciones, como ya se sugirió. Con las animaciones, PRIMERO debe cambiar sus diseños. Así que primero intente hacer que su diseño cambie al estado final sin ninguna animación. Porque es muy probable que no esté diseñando sus vistas correctamente en RelativeLayout, por lo que, aunque muestre su vista inferior, permanece oculta por la superior. Una vez que haya logrado el cambio de diseño adecuado, todo lo que necesita hacer es recordar las traducciones antes del diseño y aplicar la animación de traducción DESPUÉS del diseño.
fuente
Mi código para hacer que la animación se deslice hacia arriba y hacia abajo sin XML
Usar para deslizar hacia abajo
Para deslizarse hacia arriba
fuente
Pruebe este código a continuación, es muy corto y simple.
transalate_anim.xml
activity_main.xml
MainActivity.java
fuente
Aquí hay una solución como una extensión de [ https://stackoverflow.com/a/46644736/10249774]
El panel inferior está empujando el contenido principal hacia arriba
https://imgur.com/a/6nxewE0
activity_main.xml
Actividad principal:
fuente
Puede definir la pantalla principal y la otra pantalla que desea desplazar hacia arriba como fragmentos. Cuando se presiona el botón en la pantalla principal, el fragmento enviará un mensaje a la actividad que luego reemplazará la pantalla principal con la que desea desplazar hacia arriba y animar el reemplazo.
fuente