2014-04-21 120 views
4

當我的Android應用程序遷移到4.4時,我注意到一個非常奇怪的情況突然,我的HUD組件中的旋轉動畫開始閃爍並且無法工作。我想旋轉這樣的對象:當動畫嵌套視圖時Android 4.4旋轉動畫閃爍

rotateAnimation = new RotateAnimation(180, 360, Animation.RELATIVE_TO_SELF, 
     0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
rotateAnimation.setDuration(1000); 
rotateAnimation.setRepeatCount(Animation.INFINITE); 
rotateAnimation.setRepeatMode(Animation.RESTART); 

和:

public static void rotate(final View view) { 

if(view.getAnimation() != null) { 
    view.getAnimation().cancel(); 
    view.clearAnimation(); 
} 

view.setAnimation(rotateAnimation); 
view.getAnimation().start(); 

}

任何其他沒有嵌套視圖對象上使用時,上面的代碼工作得很好,但使用時包含在包含標記中的ImageView它根本不起作用。奇怪的是,在相同的上下文中調用的同一對象上的其他動畫是有效的。這是一個4.4錯誤?包括我的觀點如下:

<include 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     layout="@layout/view_trip_hud" 
     android:layout_gravity="bottom"/> 

而且HUD組件本身看起來是這樣的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:alpha="0.6" 
    android:background="@drawable/background_texture_dark" 
    tools:context=".app.ui.fragment.TripSummaryFragment" 
    android:gravity="center_vertical|left" 
    android:id="@+id/relativeLayoutHUDContainer"> 


    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:gravity="center_vertical" 
     android:padding="@dimen/ui_default_element_margin"> 

     <ImageView 
       android:id="@+id/imageViewTrackingStatus" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/status_preparing" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" /> 

     <TextView 
       android:id="@+id/textViewDriveQuality" 
       style="@style/HUDFont" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:text="@string/track_status_inactive" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" /> 

    </LinearLayout> 

    <view 
     android:id="@+id/linearLayoutHUDCurrentSpeed" 
     android:layout_width="wrap_content" 
     android:layout_height="40dp" 
     class="pl.com.infinitysoftware.carassistant.util.ui.HUDBlockLayout" 
     style="@style/HUDBlock" 
     android:layout_alignParentRight="true" 
     android:layout_marginLeft="@dimen/ui_min_element_margin"> 

    <TextView 
      android:id="@+id/textViewCurrentSpeed" 
      style="@style/HUDFont" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:text="-,-Km/h" 
      android:clickable="false" 
      android:layout_gravity="center_vertical" 
      android:gravity="center_vertical"/> 
     </view> 

    <view 
     class="pl.com.infinitysoftware.carassistant.util.ui.HUDBlockLayout" 
     style="@style/HUDBlock" 
     android:id="@+id/linearLayoutHUDCurrentDistance" 
     android:layout_width="wrap_content" 
     android:layout_height="40dp" 
     android:layout_alignParentTop="true" 
     android:layout_toLeftOf="@+id/linearLayoutHUDCurrentSpeed" 
     android:layout_marginLeft="@dimen/ui_min_element_margin"> 

     <TextView 
      style="@style/HUDFont" 
      android:id="@+id/textViewCurrentDistance" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:text="25 Km" 
      android:clickable="false" 
      android:layout_gravity="center_vertical" 
      android:gravity="center_vertical" /> 
    </view> 


</RelativeLayout> 

回答

11

我有一個類似的問題:

嘗試設置視圖要應用的動畫像這樣(在你製作動畫的時候):

view.setLayerType(View.LAYER_TYPE_HARDWARE,null); 
//And then apply the animation 
view.startAnimation(myAnimation); 

不要忘記把它放在你的顯卡est:

android:hardwareAccelerated="true" 
+0

哇,它的工作原理 - 非常感謝:) –

+0

我沒有把它放在清單,仍然工作。 –

+0

關閉硬件加速時,硬件層的行爲與軟件層完全相同。請閱讀:[鏈接](http://developer.android.com/reference/android/view/View.html#LAYER_TYPE_HARDWARE) –

-1

我找到了解決這個問題的方法。對象動畫師爲我工作得非常好。

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();