FloatingActionButton图标动画(Android FAB src可绘制动画)
我试图找到关于如何创建FAB(设计支持库)图标动画的文档,搜索了一段时间后,我找不到任何关于它的信息,android开发者中的AnimationDrawable引用对FAB不起作用,即使该类是ImageView的子类FloatingActionButton图标动画(Android FAB src可绘制动画),android,animation,icons,floating-action-button,Android,Animation,Icons,Floating Action Button,我试图找到关于如何创建FAB(设计支持库)图标动画的文档,搜索了一段时间后,我找不到任何关于它的信息,android开发者中的AnimationDrawable引用对FAB不起作用,即使该类是ImageView的子类 但是设法找到一个工作环境很好 我使用的技术与文档中公开的技术类似,并使用API文档 首先,我使用ValueAnimator类和一个int数组,其中包含将在动画中使用的可绘制对象的ID final int[] ids = {R.drawable.main_button_1,R
但是设法找到一个工作环境很好 我使用的技术与文档中公开的技术类似,并使用API文档 首先,我使用ValueAnimator类和一个int数组,其中包含将在动画中使用的可绘制对象的ID
final int[] ids = {R.drawable.main_button_1,R.drawable.main_button_2,R.drawable.main_button_3,R.drawable.main_button_4,R.drawable.main_button_5,R.drawable.main_button_6, R.drawable.main_button_7};
fab = (FloatingActionButton) findViewById(R.id.yourFabID);
valueAnimator = ValueAnimator.ofInt(0, ids.length - 1).setDuration(yourAnimationTime);
valueAnimator.setInterpolator( new LinearInterpolator() /*your TimeInterpolator*/ );
然后设置AnimationUpdateListener,并使用方法FloatinActionButton.setImageDrawable(Drawable yourDrawable)定义图标行为的更改
但是ValueAnimator默认情况下会更新每个可用帧(取决于硬件中的加载),但是如果已经绘制了图标,则不需要重新绘制图标,因此我使用变量“I”;因此每个图标只绘制一次。(计时取决于您定义的插值器)
此实现允许您使用方法ValueAnimator.reverse()反向播放动画代码>
我知道它不是一个专业的解决方案,但它是我唯一一个能够处理所有支持PropertyImation的API的解决方案。请,如果您知道更好的解决方案,请在这里发布,如果不知道,我希望这篇文章有帮助您可以实现FAB的src可绘制动画,这与使用背景
的动画可绘制
的其他视图非常相似
有关常规视图的背景可绘制动画,请参见
但是,您不能调用getBackground()
来获取FAB的src
相反,请使用getDrawable()
例如:
FloatingActionButton登录按钮=findViewById(R.id.loginButton);
loginAnimation=(AnimationDrawable)loginButton.getDrawable();
loginButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
loginAnimation.start();
}
});
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
int i = -1;
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int animatedValue = (int) animation.getAnimatedValue();
if(i!=animatedValue) {
fab.setImageDrawable(getResources().getDrawable(ids[animatedValue]));
i = animatedValue;
}
}
});