Tenho um layout escondido da vista. Com um clique de botão, eu quero que ele deslize de baixo para cima, empurrando todo o conteúdo da tela para cima, muito semelhante a como o Whatsapp mostra o painel de emoticons na tela de chat.
Eu vi o SlidingDrawer, que não funciona para mim. Requer uma imagem como alça que é mostrada no centro da tela, eu não quero isso. Ele também desliza sobre o conteúdo da tela existente, estou procurando uma maneira de mover o conteúdo existente para cima.
Atualização 1:
Tentei usar as animações sugeridas por Sanket Kachhela. Mas o layout oculto nunca é mostrado. Aqui está o código.
Layout (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>
Atividade (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;
}
}
}
Animações:
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>
Alguma ideia de como isso pode ser feito?
Obrigado.
hiddenPanel.bringToFront()
antes de iniciar a animação e veja se funciona. Informe-nos também, você está obtendo a exibição de painel_conhecido no layout gráfico paraactivity_main.xml
?Respostas:
Use estas animações:
bottom_up.xml
bottom_down.xml
Use este código em sua atividade para ocultar / animar sua visualização:
fonte
.setVisibility(View.VISIBLE)
salvou meu dia!Você estava perto. O segredo é fazer com que o layout oculto seja inflado
match_parent
tanto em altura quanto em peso. Simplesmente comece comoView.GONE
. Dessa forma, usar a porcentagem nos animadores funciona bem.Layout (activity_main.xml):
Atividade (MainActivity.java):
A única outra coisa que mudei foi em
bottom_up.xml
. Ao invés deEu usei:
Mas isso é uma questão de preferência, suponho.
fonte
android:zAdjustment="top"
emAnimation
ouAnimtionSet
.Você só precisa adicionar alguma linha em seu aplicativo, encontre-a no link abaixo:
Mostrar e ocultar uma visualização com uma animação de slide para cima / para baixo
Basta adicionar uma animação ao seu layout como esta:
fonte
Aqui está o que funcionou no final para mim.
Layouts:
activity_main.xml
escondido_panel.xml
Java: pacote com.example.slideuplayout;
fonte
Use este layout. Se você deseja animar a redução da vista principal, você precisará adicionar animação à altura da barra oculta, compre isso pode ser bom o suficiente para usar a animação de tradução na barra e fazer com que a altura da vista principal pule em vez de animar.
fonte
Ok, existem duas abordagens possíveis. O mais simples - é usar um menu deslizante biblioteca de . Permite criar um menu deslizante inferior, pode animar o container superior para tornar o fundo visível, suporta tanto arrastá-lo com o dedo, quanto animá-lo programaticamente via botão (StaticDrawer).
Maneira mais difícil - se você quiser usar animações, como já foi sugerido. Com animações, você deve primeiro alterar seus layouts. Portanto, tente primeiro fazer seu layout mudar para o estado final sem qualquer animação. Porque é muito provável que você não esteja exibindo suas visualizações adequadamente no RelativeLayout, então, mesmo que você mostre sua visualização inferior, ela permanecerá obscurecida pela superior. Depois de conseguir a mudança de layout adequada - tudo o que você precisa fazer é lembrar as traduções antes do layout e aplicar a animação de tradução APÓS o layout.
fonte
Meu código para fazer a animação deslizar para cima e para baixo sem XML
Usando Para deslizar para baixo
Para deslizar para cima
fonte
Experimente o código abaixo, é muito curto e simples.
transalate_anim.xml
activity_main.xml
MainActivity.java
fonte
Aqui está uma solução como uma extensão de [ https://stackoverflow.com/a/46644736/10249774]
O painel inferior empurra o conteúdo principal para cima
https://imgur.com/a/6nxewE0
activity_main.xml
Atividade principal:
fonte
Você pode definir a tela principal e a outra tela que deseja rolar para cima como fragmentos. Quando o botão na tela principal é pressionado, o fragmento envia uma mensagem para a atividade que substitui a tela principal por aquela que você deseja rolar para cima e anima a substituição.
fonte