Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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.

  • LinearyLayout no cambiará el tamaño una vez que su altura sea 0
  • 3d Cube Animation en Android
  • Cómo implementar la ampliación de animación en elemento compartido en la transición de actividad
  • Cambiar la posición de la vista después del final de la animación
  • Cómo invertir la dirección de la marquesina de un TextView
  • AdjustResize con animación
  • Mover un ImageView a diferentes posiciones de forma animada en Android
  • Cómo escalar la vista de texto animado de Android a la derecha
  • 2 Solutions collect form web for “Cómo reducir una actividad de acabado a un rectángulo”

    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); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.