Série de animação: código java para obter animação com zoom da imagem

  • Faça upload das renderizações diretamente:
  • O principal problema da animação com zoom não é como definir a animação, mas como obter o ponto central da imagem. O foco padrão da animação com zoom é o canto superior esquerdo da imagem, ou seja, a imagem é esticada para o canto inferior direito. Devemos encontrar uma maneira de obter as coordenadas do centro da imagem.

  • Primeiro experimente a situação em que o foco está no canto superior esquerdo:
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);
    }
}

Você achou que o foco está no canto superior esquerdo? iv.getWidth () obteve 0. Não muito BB, amplie.

  • Solução 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);
            }
        });
    }
}

Acho que você gosta

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