浮动动作按钮动画问题

Olu*_*ide 13 android android-animation

当我运行此问题时,我正在支持设计库中使用fab.我在Android Studio的默认空白活动模板中替换了onCreate方法,这就是它的样子:

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.animation.TranslateAnimation;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        final FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                TranslateAnimation anim = new TranslateAnimation(0, -500, 0, -500);
                anim.setDuration(1000);
                anim.setFillEnabled(true);
                anim.setFillAfter(true);
                fab.startAnimation(anim);
            }
        });
        fab.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                TranslateAnimation anim = new TranslateAnimation(0, -500, 0, -500);
                anim.setDuration(1000);
                anim.setFillEnabled(true);
                anim.setFillAfter(true);
                fab.startAnimation(anim);
                return true;
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上,我添加了一个onClickListener和一个onLongClickListener,它将fab翻译为500idks,但问题是它不能像它应该的那样工作.

当我点击它时,通常没有任何反应,这一切都很奇怪.这是一个正在发生的视频.

当我长按它时,它会像我应该的那样动画,但只有当我一直按下时,无论何时我抬起手指它都会回到原始位置,无论动画是否完整,即使我设置setFillEnabled(true)setFillAfter(true).

以下是当我抬起手指以及当我手指放在屏幕上直到最后和所有事情时会发生什么的视频.

动画

为什么会这样?

Igo*_*nov 6

我不知道为什么你会遇到这个动画问题,但它看起来像一个bug.我检查了你的代码并且它适用于我的Android 6.0,但它不适用于安装了Android 4.4的Android模拟器(但我的问题与你的有点不同).

所以我认为这是一个错误,因为TranslateAnimation有(也许还有)一些错误,比如这一个,两个.

我的建议是如何避免接下来的.用于ViewPropertyAnimator为视图设置动画.在这种情况下,您的代码应如下所示:

    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            fab.animate()
                    .translationX(-500)
                    .translationY(-500)
                    .setDuration(1000)
                    .start();
        }
    });
    fab.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            fab.animate()
                    .translationX(-500)
                    .translationY(-500)
                    .setDuration(1000)
                    .start();
            return true;
        }
    });
Run Code Online (Sandbox Code Playgroud)

我在Android模拟器上使用Android 4.3,4.4,5.0,6.0进行了检查,它运行正常.

更新

为您找到解决方案.所以你可以使用ViewPropertyAnimatorCompat支持库,你的代码类似于:

fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
            ViewCompat.animate(fab)
                    .translationX(-500)
                    .translationY(-500)
                    .setDuration(1000)
                    .start();
    }
});
fab.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View view) {
            ViewCompat.animate(fab)
                    .translationX(-500)
                    .translationY(-500)
                    .setDuration(1000)
                    .start();
        return true;
    }
});
Run Code Online (Sandbox Code Playgroud)