Android:没有播放动画(实现相同动画效果的几个按钮)

时间:2014-05-14 14:17:32

标签: android animation view onclicklistener

我想对按钮A,B和C应用相同的alphaanimation,因此实现了以下代码:

public void onCreate(Bundle savedInstanceState) 
{
    animation = new MutableAlphaAnimation();
    animation.setAnimationListener(this);   

    btn_A.setOnClickListener(new OnClickListener() 
    {         
        public void onClick(View v) 
        {                           
            animation.setResetBlocked(true);
            btn_A.setAnimation(animation);
            animation.setResetBlocked(false);
            animation.start(0.0f, 0.5f, FADE_IN_DURATION);
            btn_A.invalidate();
        }  
    }); 
}

public class MutableAlphaAnimation extends Animation 
    {
        private float mFromAlpha;
        private float mToAlpha;
        private boolean resetBlocked;

        public MutableAlphaAnimation() 
        {
        }

        public void start(float fromAlpha, float toAlpha, long duration) 
        {
            mFromAlpha = fromAlpha;
            mToAlpha = toAlpha;
            setDuration(duration);
            setStartTime(START_ON_FIRST_FRAME);
        }

        public void setResetBlocked(boolean resetBlocked) 
        {
            this.resetBlocked = resetBlocked;
        }

        @Override
        public void reset() 
        {
            if (! resetBlocked) super.reset();
        }

        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) 
        {
            final float alpha = mFromAlpha;
            t.setAlpha(alpha + ((mToAlpha - alpha) * interpolatedTime));
        }

        @Override
        public boolean willChangeTransformationMatrix() 
        {
            return false;
        }

        @Override
        public boolean willChangeBounds() 
        {
            return false;
        }
    } 

问题:

btn_A,B和C使用相同的setOnClickListener实现。然而,当他们被按下时,没有任何事情发生。为什么?如何修改上述内容?

谢谢!

1 个答案:

答案 0 :(得分:0)

您没有将转化应用于btn_home。是的你将它设置为动画,但你的动画类永远不会触及btn_home。你的t.setAlpha ...应该是btn_home.setAlpha ...,所以使用构造函数传入视图,然后你可以在将来的任何视图中使用它。