Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FloatingActionButton图标动画(Android FAB src可绘制动画)_Android_Animation_Icons_Floating Action Button - Fatal编程技术网

FloatingActionButton图标动画(Android FAB src可绘制动画)

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

我试图找到关于如何创建FAB(设计支持库)图标动画的文档,搜索了一段时间后,我找不到任何关于它的信息,android开发者中的AnimationDrawable引用对FAB不起作用,即使该类是ImageView的子类


但是设法找到一个工作环境很好

我使用的技术与文档中公开的技术类似,并使用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;
            }
        }
    });