动画系列:java代码实现图片缩放动画

  • 直接上效果图:
  • 缩放动画的核心难题,不在于怎么设置动画,而在于如何拿到图片的中心点。缩放动画的默认焦点是图片的左上角,也就是说,图片是向右下拉伸的。我们必须想办法拿到图片的中心位置坐标。
  • 先体验下焦点在左上角的情况:
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);
            }
        });
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值