2015-11-06 3 views
3

Я использовал анимацию вращения для моей кнопки. его отлично работает на Android 5.0 и выше, но при тестировании на версии Android 4.4. его мигает и не вращается. AS, предложенный некоторыми другими, я попытался использовать тип Layer, заполнить и заполнить ранее. Но ничего не работает. Ниже мой код:Rotate Animation не работает на Android 4.4.4

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <rotate 
    android:duration="200" 
    android:fromDegrees="0" 
    android:interpolator="@android:anim/linear_interpolator" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:startOffset="0" 
    android:toDegrees="180" 
    android:repeatMode="reverse"> 
    </rotate> 
</set> 

Animation mAnim = AnimationUtils.loadAnimation(getActivity(), R.anim.rotate); 

    mAnim.setAnimationListener(new Animation.AnimationListener() { 
     @Override 
     public void onAnimationStart(Animation animation) { 

     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
     exchangeValues(); 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 

     } 
    }); 
    if (floatingActionButton != null) { 
     floatingActionButton.startAnimation(mAnim); 
    } 

ответ

1

Да, я нашел ответ на свой вопрос. Я попытался установить тип слоя и многие другие решения, предоставляемые в разных местах. но кто-то предложил мне использовать ObjectAnimator, и это сработало для меня как шарм. Вот код

ObjectAnimator floatingButtonAnimator = ObjectAnimator.ofFloat(floatingActionButton, 
    ANIMATION_NAME, ANIMATION_STARTING_DEGREE, ANIMATION_ENDING_DEGREE); 
floatingButtonAnimator.setDuration(ANIMATION_DURATION).addListener(new AnimatorListenerAdapter() { 
    @Override 
    public void onAnimationStart(Animator animation) { 
    super.onAnimationStart(animation); 
    } 

    @Override 
    public void onAnimationEnd(Animator animation) { 
    super.onAnimationEnd(animation); 
    exchangeValues(); 
    } 
}); 
floatingButtonAnimator.start(); 
+0

Что ANIMATION_NAME? –

+0

Что такое 'ANIMATION_NAME'? Что такое' exchangeValues'? – Divers

1

Это звучит как аппаратного ускорения вопрос: попробуйте установить LayerType из ваших View/Button к LayerType.SOFTWARE

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

Я также предлагаю попробовать немного увеличить продолжительность анимации (например, до 400 мс).

+0

не работал для меня :( –

Смежные вопросы