Animaciones de diseño de Android de abajo hacia arriba y de arriba a abajo en ImageView
He creado una vista en Android y tengo que animar de abajo hacia arriba y viceversa. Cuando hice clic en ImageView
necesito animar el RelativeLayout
completo de abajo hacia arriba y se logra. Pero cuando vuelvo a hacer clic en ImageView
y no se mueve hacia abajo. Además, cuando hago clic en su lugar original, cuando hago clic en la posición original de la animación ImageView
ejecuta, pero el RelativeLayout
mueve hacia abajo desde la posición original, no de arriba a abajo.
Este es mi código:
- ¿Cómo hago pausas la animación de los cuadros usando AnimationDrawable?
- TranslateAnimación en un ImageView no funciona
- Material Android L Interpolador de transición de imagen
- No se puede crear una carpeta 'res / transition' después de actualizar SDK a Kitkat 4.4.2
- Cómo deslizar un ImageView de izquierda a derecha suavemente en Android?
ImageView iv_header; RelativeLayout rl_footer; boolean isBottom = true; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.rateus_layout); rl_footer = (RelativeLayout) findViewById(R.id.rl_footer); iv_header = (ImageView) findViewById(R.id.iv_up_arrow); iv_header.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (isBottom) { FooterAnimation(); isBottom = false; } else { headerAnimation(); isBottom = true; } } }); } public void FooterAnimation() { Animation hide = AnimationUtils.loadAnimation(this, R.anim.move); rl_footer.startAnimation(hide); } public void headerAnimation() { Animation hide = AnimationUtils.loadAnimation(this, R.anim.footer); rl_footer.startAnimation(hide); }
El archivo de animación de abajo hacia arriba (Disposición relativa completa se mueve de abajo hacia arriba):
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1500" android:fillAfter="true" android:fromYDelta="0%p" android:toYDelta="-85%p" />
El archivo de animación de arriba a abajo (quiero volver a poner la disposición relativa de arriba a abajo):
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1500" android:fillAfter="true" android:fromYDelta="0%p" android:toYDelta="84%p" />
El archivo Xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rl_main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/autograph_bg" > <RelativeLayout android:id="@+id/rl_footer" android:layout_width="fill_parent" android:layout_height="70dp" android:layout_alignParentBottom="true" android:background="@drawable/down_manu_bar1" > <ImageView android:id="@+id/iv_new_file" android:layout_width="25dp" android:layout_height="25dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="18dp" android:onClick="onNewFileClick" android:src="@drawable/file_icon" /> <TextView android:id="@+id/tv_new_file" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/iv_new_file" android:layout_below="@+id/iv_new_file" android:text="New" android:textColor="#ffffff" /> <ImageView android:id="@+id/iv_insert" android:layout_width="25dp" android:layout_height="25dp" android:layout_alignTop="@+id/iv_new_file" android:layout_marginLeft="30dp" android:layout_toRightOf="@+id/iv_new_file" android:src="@drawable/insert_icon" /> <TextView android:id="@+id/tv_insert" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/iv_insert" android:layout_below="@+id/iv_insert" android:text="Insert" android:textColor="#ffffff" /> <ImageView android:id="@+id/iv_up_arrow" android:layout_width="45dp" android:layout_height="45dp" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:paddingBottom="10dp" android:src="@drawable/up_arrow" /> <ImageView android:id="@+id/iv_down_arrow" android:layout_width="45dp" android:layout_height="45dp" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:background="@drawable/down_arrow" android:paddingBottom="10dp" android:visibility="gone" /> <ImageView android:id="@+id/iv_save" android:layout_width="25dp" android:layout_height="25dp" android:layout_alignTop="@+id/iv_insert" android:layout_marginLeft="30dp" android:layout_toRightOf="@+id/iv_up_arrow" android:src="@drawable/save" /> <TextView android:id="@+id/tv_save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/iv_save" android:layout_alignParentBottom="true" android:text="Save" android:textColor="#ffffff" /> <ImageView android:id="@+id/iv_settings" android:layout_width="25dp" android:layout_height="25dp" android:layout_alignTop="@+id/iv_save" android:layout_marginLeft="27dp" android:layout_toRightOf="@+id/tv_save" android:paddingTop="2dp" android:src="@drawable/icon_settings" /> <TextView android:id="@+id/tv_settings" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginLeft="260dp" android:text="Settings" android:textColor="#ffffff" /> </RelativeLayout> </RelativeLayout>
- Animación de escala de Android con interpolador de rebote
- Cómo implementar google + listview animación
- Vista de calibre simple como speedmeter en android?
- Anime el botón Fab cruzar para marcar
- Comportamiento de sombra extraño durante el cambio de tarjeta
- Cómo agregar vista al diseño XML android
- Repetir la animación de Android
- Cambiar el tamaño de los diseños de forma programática (como animación)
He resuelto mi problema y ahora mi animación funciona bien 🙂 si alguien necesita sólo copiar mi código y archivo xml y tener una codificación feliz 🙂
Mi actividad MainActivity:
import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.AnimationUtils; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.RelativeLayout; public class MainActivity extends Activity { RelativeLayout rl_footer; ImageView iv_header; boolean isBottom = true; Button btn1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rl_footer = (RelativeLayout) findViewById(R.id.rl_footer); iv_header = (ImageView) findViewById(R.id.iv_up_arrow); iv_header.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub iv_header.setImageResource(R.drawable.down_arrow); iv_header.setPadding(0, 10, 0, 0); rl_footer.setBackgroundResource(R.drawable.up_manu_bar); if (isBottom) { SlideToAbove(); isBottom = false; } else { iv_header.setImageResource(R.drawable.up_arrow); iv_header.setPadding(0, 0, 0, 10); rl_footer.setBackgroundResource(R.drawable.down_manu_bar1); SlideToDown(); isBottom = true; } } }); } public void SlideToAbove() { Animation slide = null; slide = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -5.0f); slide.setDuration(400); slide.setFillAfter(true); slide.setFillEnabled(true); rl_footer.startAnimation(slide); slide.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { rl_footer.clearAnimation(); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams( rl_footer.getWidth(), rl_footer.getHeight()); // lp.setMargins(0, 0, 0, 0); lp.addRule(RelativeLayout.ALIGN_PARENT_TOP); rl_footer.setLayoutParams(lp); } }); } public void SlideToDown() { Animation slide = null; slide = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 5.2f); slide.setDuration(400); slide.setFillAfter(true); slide.setFillEnabled(true); rl_footer.startAnimation(slide); slide.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { rl_footer.clearAnimation(); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams( rl_footer.getWidth(), rl_footer.getHeight()); lp.setMargins(0, rl_footer.getWidth(), 0, 0); lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); rl_footer.setLayoutParams(lp); } }); } @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; } }
Y mi Xml activity_main:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rl_main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/autograph_bg" > <RelativeLayout android:id="@+id/rl_footer" android:layout_width="fill_parent" android:layout_height="70dp" android:layout_alignParentBottom="true" android:background="@drawable/down_manu_bar1" > <ImageView android:id="@+id/iv_new_file" android:layout_width="25dp" android:layout_height="25dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="18dp" android:onClick="onNewFileClick" android:src="@drawable/file_icon" /> <TextView android:id="@+id/tv_new_file" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/iv_new_file" android:layout_below="@+id/iv_new_file" android:text="New" android:textColor="#ffffff" /> <ImageView android:id="@+id/iv_insert" android:layout_width="25dp" android:layout_height="25dp" android:layout_alignTop="@+id/iv_new_file" android:layout_marginLeft="30dp" android:layout_toRightOf="@+id/iv_new_file" android:src="@drawable/insert_icon" /> <TextView android:id="@+id/tv_insert" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/iv_insert" android:layout_below="@+id/iv_insert" android:text="Insert" android:textColor="#ffffff" /> <ImageView android:id="@+id/iv_up_arrow" android:layout_width="45dp" android:layout_height="45dp" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:paddingBottom="10dp" android:src="@drawable/up_arrow" /> <ImageView android:id="@+id/iv_down_arrow" android:layout_width="45dp" android:layout_height="45dp" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:background="@drawable/down_arrow" android:paddingBottom="10dp" android:visibility="gone" /> <ImageView android:id="@+id/iv_save" android:layout_width="25dp" android:layout_height="25dp" android:layout_alignTop="@+id/iv_insert" android:layout_marginLeft="30dp" android:layout_toRightOf="@+id/iv_up_arrow" android:src="@drawable/save" /> <TextView android:id="@+id/tv_save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/iv_save" android:layout_alignParentBottom="true" android:text="Save" android:textColor="#ffffff" /> <ImageView android:id="@+id/iv_settings" android:layout_width="25dp" android:layout_height="25dp" android:layout_alignTop="@+id/iv_save" android:layout_marginLeft="27dp" android:layout_toRightOf="@+id/tv_save" android:paddingTop="2dp" android:src="@drawable/icon_settings" /> <TextView android:id="@+id/tv_settings" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginLeft="260dp" android:text="Settings" android:textColor="#ffffff" /> </RelativeLayout> </RelativeLayout>
Sólo crear nuevo proyecto androide y copia pegar mi código y divertirse! 🙂 También recuerdo en xml tengo vista de imagen y sus imágenes de fondo reemplazar con yout propias imágenes gracias ..
Prueba esto :
Cree la carpeta anim dentro de su carpeta res y copie estos cuatro archivos:
Slide_in_bottom.xml:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromYDelta="100%p" android:duration="@android:integer/config_longAnimTime"/>
Slide_out_bottom.xml:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromYDelta="0" android:duration="@android:integer/config_longAnimTime" />
Slide_in_top.xml:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:toYDelta="0%p" android:duration="@android:integer/config_longAnimTime" />
Slide_out_top.xml:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:toYDelta="100%p" android:duration="@android:integer/config_longAnimTime" />
Al hacer clic en la overridePendingTransition(R.anim.slide_in_bottom, R.anim.slide_out_bottom);
vista de imagen overridePendingTransition(R.anim.slide_in_bottom, R.anim.slide_out_bottom);
Cuando claik en lugar original, llame overridePendingTransition(R.anim.slide_in_top, R.anim.slide_out_top);
Actividad principal :
package com.example.animationtest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity { Button btn1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn1 = (Button) findViewById(R.id.btn1); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, test.class)); } }); } }
Activity_main.xml:
<LinearLayout 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" tools:context=".MainActivity" > <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button1" /> </LinearLayout>
Test.java:
package com.example.animationtest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class test extends Activity { Button btn1; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.test); btn1 = (Button) findViewById(R.id.btn1); overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_right); startActivity(new Intent(test.this, MainActivity.class)); } }); } }
Test.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button1" /> </LinearLayout>
Espero que esto ayude.