android 关于Button在StateListDrawable 中使用AnimationDrawable的问题

最近在实现一个button的效果时,UI要求未点击时,button有相应的动画,按住时有相应的效果,于是自然而然的想到了使用StateListDrawable ,以及帧动画。

遇到了一个异常:android.graphics.drawable.StateListDrawable cannot be cast to android.graphics.drawable.AnimationDrawable。

以下是我的相应代码:
xml中:

person_setting_user_rank_style.xml:




   
   
   


res/anim/user_rank_btn_anim.xml:



    
    
    
    
    

一开始在activity中是直接调用了:

mUserRankAnim= (AnimationDrawable) mUserRankBtn.getBackground(); 
mUserRankAnim.start();

结果出现了:
android.graphics.drawable.StateListDrawable cannot be cast to android.graphics.drawable.AnimationDrawable异常。

由于button的android:background采用的是StateListDrawable ,那么mUserRankBtn.getBackground()得到的也就会是StateListDrawable ,而不是AnimationDrawable,所以会出现这个异常。

正确的写法是:

private void startUserRankAnim() {
        //让按钮获取到焦点(为了进入activity后自动开始动画,如果是点击button后才开始动画,那么可以不用获取焦点)
        mUserRankBtn.setFocusable(true);
        mUserRankBtn.setFocusableInTouchMode(true);
        mUserRankBtn.requestFocus();
        mUserRankBtn.requestFocusFromTouch();
        StateListDrawable background = (StateListDrawable) mUserRankBtn.getBackground();
        Drawable current = background.getCurrent();
        if (current instanceof AnimationDrawable) {
            mUserRankAnim = (AnimationDrawable) current;
            mUserRankAnim.start();
        }
    }

参考资料:

http://stackoverflow.com/questions/5299219/button-states-with-background-as-animationdrawable-in-android

你可能感兴趣的:(android 关于Button在StateListDrawable 中使用AnimationDrawable的问题)