Cómo reducir una actividad de acabado a un rectángulo

En mi aplicación de Android, tengo una Activity flotante. Se ha iniciado desde fuera de mi aplicación mediante ActivityOptions.makeScaleUpAnimation para escalar desde un rectángulo "originario". Cuando mi Activity termina, me gustaría que hiciera lo contrario de esa animación: es decir, se encoge de nuevo a ese rectángulo a medida que se desvanece.

Sé que puedo obtener el rectángulo con getIntent().getSourceBounds() , y esperaba ser capaz de utilizar overridePendingTransition() al terminar para lograr este efecto, pero overridePendingTransition() sólo puede aceptar un recurso XML fijo: there doesn Parece ser una manera de hacer que la animación dependa de los límites de la fuente. ¿Hay algo más que pueda utilizar para lograr este efecto?

Mi aplicación es para API 11+, pero como es un efecto cosmético solamente, estaría satisfecho con una solución que depende de una versión posterior.

Pienso que hay una manera de escalar abajo de la ventana de la actividad con excepción de la llamada overridePendingTransition. Sin embargo, este código puede ayudar:

Aumentar proporcionalmente

ActivityOptions opts = ActivityOptions.makeCustomAnimation (getActivity (), R.anim.scale_up, 0); StartActivity (new Intent (this, SecondActivity.class), opts.toBundle ());

Aquí está el archivo de animación scale_up:

 <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromXScale="0" android:toXScale="1.0" android:fromYScale="0" android:toYScale="1.0" android:pivotX="50%p" android:pivotY="50%p" android:duration="500"/> </set> 

Reducir proporcionalmente

Llame a este código de la actividad de salida:

 finish(); overridePendingTransition(0, R.anim.scale_down); 

Aquí está el archivo de animación scale_down:

 <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromXScale="1.0" android:toXScale="0" android:fromYScale="1.0" android:toYScale="0" android:pivotX="50%p" android:pivotY="50%p" android:duration="250"/> </set> 

Puede variar la escala X e Y para obtener el rectángulo deseado. Espero que esto ayude.

Sobre la base de mi último comentario, aquí está la solución que he probado y funciona. Es posible que tenga que modificar para adaptarse a sus necesidades.

Implementar una actividad con fondo transparente y sin título dentro del manifiesto:

  <activity android:name="com.example.backgroundsensor.AnimatedActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="Animated activity" /> 

Y dejar que establezca la vista de contenido con un diseño como:

  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/transparent" tools:ignore="MergeRootFrame" > <View android:id="@+id/visibleAreaView" android:layout_width="300dp" android:layout_height="300dp" android:layout_gravity="center" android:background="@android:color/holo_green_dark" /> </FrameLayout> 

El visibleAreaView es el que se verá en la pantalla, ya que la actividad es transparente. Puede establecer los límites de la vista en OnCreate de la actividad ().

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.animated_activity); // set the bounds of the animateView } 

Además, Anule el método de finalización algo como esto:

 boolean animateFirst=true; @Override public void finish() { if(animateFirst) { animateFirst = false; loadAnim(); }else { super.finish(); } } public void loadAnim() { View v = findViewById(R.id.animateView); float x= v.getX() + v.getRight()/2; float y = v.getY(); anim = new ScaleAnimation(1.0f, 0.0f,1.0f, 0.0f, x, y); anim.setDuration(300); anim.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationRepeat(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationEnd(Animation animation) { findViewById(R.id.animateView).setVisibility(View.GONE); AnimatedActivity.this.finish(); } }); v.startAnimation(anim); } 
  • Transición suave entre actividades sin pantalla negra
  • Adición de efecto de ondulación a RecyclerView item
  • Agitación / animación de la animación en android
  • Android dibujar círculo con ruta
  • Cómo resolver OutOfMemoryError en android?
  • ¿Cómo eliminar una vista animada después de que termine la animación en Android?
  • ¿Qué animación / vista se utiliza para las aplicaciones recientes / History en android 5.0 (Lollipop)?
  • Android animate () withEndAction () vs setListener () onAnimationEnd ()
  • Cómo jugar GIF en android
  • Comportamiento extraño de RecyclerView después de eliminar el elemento
  • Cómo cargar AnimationDrawable desde un archivo xml
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.