Serie de animación: código java para lograr una animación de zoom de imagen

  • Sube directamente las representaciones:
  • El problema principal de la animación con zoom no es cómo configurar la animación, sino cómo obtener el punto central de la imagen. El enfoque predeterminado de la animación de zoom es la esquina superior izquierda de la imagen, es decir, la imagen se estira hacia la parte inferior derecha. Debemos encontrar una forma de obtener las coordenadas del centro de la imagen.

  • Primero experimente la situación en la que el foco está en la esquina superior izquierda:
public class MainActivity extends AppCompatActivity {

    ImageView iv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        iv = findViewById(R.id.iv);
        ScaleAnimation scaleAnimation2 = new ScaleAnimation(1f, 2f, 1f, 2f,
                ScaleAnimation.ABSOLUTE,
                iv.getWidth() / 2f,
                ScaleAnimation.ABSOLUTE,
                iv.getHeight() / 2f);
        scaleAnimation2.setDuration(2000);
        //设置动画结束之后的状态是否是动画开始时的状态,true,表示是保持动画开始时的状态
        scaleAnimation2.setFillBefore(true);
        //设置reverse的效果是先放大,再缩小。设置restart的效果是先放大,瞬间变小,再放大。
        scaleAnimation2.setRepeatMode(ScaleAnimation.REVERSE);
        scaleAnimation2.setRepeatCount(ScaleAnimation.INFINITE);
        iv.startAnimation(scaleAnimation2);
    }
}

¿Descubrió que el foco está en la esquina superior izquierda? iv.getWidth () obtuvo 0. No mucho BB, acércate.

  • Solución final

public class MainActivity extends AppCompatActivity {
    ImageView iv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        iv = findViewById(R.id.iv);
        iv.post(new Runnable() {
            @Override
            public void run() {
                ScaleAnimation scaleAnimation2 = new ScaleAnimation(1f, 2f, 1f, 2f,
                        ScaleAnimation.ABSOLUTE,
                        iv.getWidth() / 2f,
                        ScaleAnimation.ABSOLUTE,
                        iv.getHeight() / 2f);
                scaleAnimation2.setDuration(2000);
                //设置动画结束之后的状态是否是动画开始时的状态,true,表示是保持动画开始时的状态
                scaleAnimation2.setFillBefore(true);
                //设置reverse的效果是先放大,再缩小。设置restart的效果是先放大,瞬间变小,再放大。
                scaleAnimation2.setRepeatMode(ScaleAnimation.REVERSE);
                scaleAnimation2.setRepeatCount(ScaleAnimation.INFINITE);
                iv.startAnimation(scaleAnimation2);
            }
        });
    }
}

Supongo que te gusta

Origin blog.csdn.net/zhangjin1120/article/details/113732439
Recomendado
Clasificación