-
缩放动画的核心难题,不在于怎么设置动画,而在于如何拿到图片的中心点。缩放动画的默认焦点是图片的左上角,也就是说,图片是向右下拉伸的。我们必须想办法拿到图片的中心位置坐标。
- Gif图弄起来,比较麻烦,后续补上。先体验下焦点在左上角的情况:
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);
}
}
是不是发现,焦点在左上角?iv.getWidth()拿到的是0。不多BB,放大招了。
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);
}
});
}
}