Android规模动画 - 反向问题

时间:2015-11-27 23:16:04

标签: java android android-intent mobile android-animation

我设法为我的Image添加了一个缩放动画,使其从原始大小增长到更大的大小。但是,我需要添加动画代码的另一个副本,使其缩小到其“#”;原始尺寸。我想在布尔值为真时循环播放动画。

我参与了一些参数,但我无法使其发挥作用。到目前为止,这是我的代码:

class AnimateButton extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {

            Boolean isGlowing = true; //Make it run forever
            while (isGlowing) {
                scal_grow = new ScaleAnimation(0, 1.2f, 0, 1.2f, Animation.RELATIVE_TO_SELF, (float) 0.5, Animation.RELATIVE_TO_SELF, (float) 0.5);
                scal_grow.setDuration(1500);
                scal_grow.setFillAfter(true);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        btn_layer.setAnimation(scal_grow);
                    }
                });

                try {
                    Thread.sleep(1500);
                } catch (Exception e) { }

                     //Add a reverse animation such that it goes back to the original size

            }
        return null;
     }
}

我应该做些什么改变?

3 个答案:

答案 0 :(得分:9)

在android中,除了UIThread(主线程)之外的任何其他线程都不会发生动画和UI更新。
删除AsyncTask并尝试使用ViewPropertyAnimator,它在性能方面优于ScaleAnimation。另外,它只是一行。

缩放:

btn_layer.animate().scaleX(1.2f).scaleY(1.2f).setDuration(1500).start();

到unscale:

btn_layer.animate().scaleX(0.8f).scaleY(0.8f).setDuration(1500).start();

更新

PropertyValuesHolder scalex = PropertyValuesHolder.ofFloat(View.SCALE_X, 1.2f);
PropertyValuesHolder scaley = PropertyValuesHolder.ofFloat(View.SCALE_Y, 1.2f);
ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder(btn_layer, scalex, scaley);
anim.setRepeatCount(ValueAnimator.INFINITE);
anim.setRepeatMode(ValueAnimator.REVERSE);
anim.setDuration(1500);
anim.start();

答案 1 :(得分:3)

我绝对建议不要使用旧版android.view.animation动画,而是使用Property Animations。旧视图动画效果不佳,并且不像您期望的那样在视图上工作。

使用属性动画,这个脉冲动画非常简单。你可以用XML定义它:

<animator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1500"
    android:valueFrom="1"
    android:valueTo="1.2"
    android:valueType="floatType"
    android:repeatCount="infinite"
    android:repeatMode="reverse"/>

当你应用它时,动画将通过反转无限重复。

在Java中它看起来像这样:

    PropertyValuesHolder scalex = PropertyValuesHolder.ofFloat(View.SCALE_X, 1.2f);
    PropertyValuesHolder scaley = PropertyValuesHolder.ofFloat(View.SCALE_Y, 1.2f);
    ObjectAnimator anim = ObjectAnimator.ofPropertyValuesHolder(btn_layer, scalex, scaley);
    anim.setRepeatCount(ValueAnimator.INFINITE);
    anim.setRepeatMode(ValueAnimator.REVERSE);
    anim.setDuration(1500);
    anim.start();

这将为您提供更加期待的体验,并为您提供线程和时间安排。当您想要停止动画时,只需致电s.cancel()即可。

答案 2 :(得分:0)

要取消刻度,你可以使用它:

ID

缩放和缩放的方法:

 ScaleAnimation unscal_grow = new ScaleAnimation(1.2f, 1.0f, 1.2f, 1.0f, Animation.RELATIVE_TO_SELF, (float) 0.5, Animation.RELATIVE_TO_SELF, (float) 0.5);
 unscal_grow .setDuration(1500);
 unscal_grow .setFillAfter(true);