J'ai une mise en page cachée de la vue. Sur un bouton, cliquez sur Je veux qu'il glisse vers le haut à partir du bas en poussant tout le contenu de l'écran vers le haut, très similaire à la façon dont WhatsApp affiche le panneau des émoticônes dans l'écran de discussion.
J'ai vu SlidingDrawer, cela ne fonctionne pas pour moi. Cela nécessite une image comme poignée qui est affichée au centre de l'écran, je ne veux pas de ça. Il glisse également sur le contenu de l'écran existant, je cherche un moyen de déplacer le contenu existant vers le haut.
Mise à jour 1:
J'ai essayé d'utiliser les animations suggérées par Sanket Kachhela. Mais la disposition cachée n'est jamais affichée. Voici le code.
Mise en page (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>
Activité (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;
}
}
}
Animations:
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>
Des idées comment cela peut-il être fait?
Merci.
hiddenPanel.bringToFront()
avant de commencer l'animation et voyez si cela fonctionne. Faites-nous savoir également, obtenez-vous la vue hidden_panel dans la mise en page graphique pouractivity_main.xml
?Réponses:
Utilisez ces animations:
bottom_up.xml
bottom_down.xml
Utilisez ce code dans votre activité pour masquer / animer votre vue:
la source
.setVisibility(View.VISIBLE)
sauvé ma journée!Vous étiez proche. La clé est de faire gonfler la disposition cachée
match_parent
à la fois en hauteur et en poids. Commencez simplement parView.GONE
. De cette façon, l'utilisation du pourcentage dans les animateurs fonctionne correctement.Mise en page (activity_main.xml):
Activité (MainActivity.java):
La seule autre chose que j'ai changée était
bottom_up.xml
. Au lieu deJ'ai utilisé:
Mais c'est une question de préférence, je suppose.
la source
android:zAdjustment="top"
sur votreAnimation
ouAnimtionSet
.Il vous suffit d'ajouter une ligne dans votre application, veuillez la trouver à partir du lien ci-dessous:
Afficher et masquer une vue avec une animation de diapositive haut / bas
Ajoutez simplement une animation à votre mise en page comme ceci:
la source
Voici ce qui a finalement fonctionné pour moi.
Mises en page:
activity_main.xml
hidden_panel.xml
Java: package com.example.slideuplayout;
la source
Utilisez cette disposition. Si vous souhaitez animer la vue principale en rétrécissant, vous devrez ajouter une animation à la hauteur de la barre cachée, achetez cela peut être assez bon pour utiliser l'animation de traduction sur la barre et faire sauter la hauteur de la vue principale au lieu de l'animer.
la source
Ok, il y a deux approches possibles. Le plus simple - est d'utiliser une bibliothèque de menus coulissants . Il permet de créer un menu coulissant du bas, il peut animer le conteneur du haut pour rendre le bas visible, il permet à la fois de le faire glisser avec votre doigt, ou de l'animer par programme via le bouton (StaticDrawer).
Plus difficile - si vous souhaitez utiliser des animations, comme cela a déjà été suggéré. Avec les animations, vous devez d'abord modifier vos mises en page. Essayez donc d'abord de faire passer votre mise en page à l'état final sans aucune animation. Comme il est très probable que vous ne disposiez pas correctement vos vues dans RelativeLayout, même si vous affichez votre vue de dessous, elle reste masquée par celle du haut. Une fois que vous avez effectué un changement de mise en page approprié, il vous suffit de vous souvenir des traductions avant la mise en page et d'appliquer l'animation de traduction APRÈS la mise en page.
la source
Mon code pour faire glisser l'animation vers le haut, glisser vers le bas sans XML
Utilisation de pour glisser vers le bas
Pour glisser vers le haut
la source
Essayez ce code ci-dessous, c'est très court et simple.
transalate_anim.xml
activity_main.xml
MainActivity.java
la source
Voici une solution en tant qu'extension de [ https://stackoverflow.com/a/46644736/10249774]
Le panneau inférieur pousse le contenu principal vers le haut
https://imgur.com/a/6nxewE0
activity_main.xml
Activité principale:
la source
Vous pouvez définir l'écran principal et l'autre écran que vous souhaitez faire défiler en tant que fragments. Lorsque le bouton sur l'écran principal est enfoncé, le fragment enverrait un message à l'activité qui remplacerait alors l'écran principal par celui que vous souhaitez faire défiler vers le haut et animer le remplacement.
la source