- 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.
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);
}
});
}
}
-
Referência: uso da animação em zoom da ScaleAnimation