当我运行这个问题时,我正在研究支持设计库中的 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 .
为什么会这样?
最佳答案
我不知道你为什么会遇到这个动画问题,但它看起来像是一个错误。我检查了您的代码,它适用于我的 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/