android - float 操作按钮动画问题

标签 android android-animation

当我运行这个问题时,我正在研究支持设计库中的 fab。 我在 Android Studio 的默认空白 Activity 模板中替换了 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;
            }
        });
    }
}

所以基本上,我添加了一个 onClickListener 和一个 onLongClickListener 来将 fab 翻译 500idks,但问题是它没有像预期的那样工作。

当我点击它时,通常没有任何反应,这从一开始就很奇怪。这是一个 video它的发生。

当我长按它时,它会像我应该的那样动画,但前提是我一直按下,并且每当我抬起手指时它都会回到原来的位置,无论动画是否完成,即使我设置了 setFillEnabled(true)setFillAfter(true)

以下是我 lift 时发生的情况的视频我的手指,当我leave我的手指在屏幕上直到最后 everything .

Animation

为什么会这样?

最佳答案

我不知道你为什么会遇到这个动画问题,但它看起来像是一个错误。我检查了您的代码,它适用于我的 Android 6.0,但它不适用于搭载 Android 4.4 的 Android Emulator(但我的问题与您的问题略有不同)。

所以我假设这是一个错误,因为 TranslateAnimation 有(并且可能仍然有)一些像这样的错误 one , two .

接下来是我的建议,您可以如何避免它。使用 ViewPropertyAnimator 为您的 View 设置动画。在这种情况下,您的代码应如下所示:

    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;
        }
    });

我在使用 Android 4.3、4.4、5.0、6.0 的 Android Emulator 上进行了检查,它工作正常。

更新

为您找到了解决方案。因此,您可以使用支持库中的 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;
    }
});

关于android - float 操作按钮动画问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35046210/

相关文章:

带有文本和图像的 Android 按钮

android - WebGL:在 Android 上拒绝支持 OES_texture_float

Android gridview展开元素动画

android - 如何将 fragment View 的参数(如宽度和高度)获取到 Activity?

android - 当手指移动时,捏合缩放会被清除

java - 使用带有 JSch 的 "exec" channel 运行命令不返回任何输出

android - 在 Android 中翻转两个面的硬币

android - fragment popbackstack 动画不起作用

android - 如何在 android 的节电模式下播放动画?有什么解决办法吗?

android - 检测到应用程序 native 库 libutility.so : text relocations 的问题