2010-04-02 25 views
10

我想在主頁Widget上使用動畫,即AppWidgetProvider。我希望能使用「幀動畫」技術:有沒有辦法在家庭小工具上進行動畫製作?

http://developer.android.com/guide/topics/graphics/2d-graphics.html#frame-animation

我已經在活動中成功地使用

。但我無法將該代碼翻譯成AppWidgetProvider。

基本上,在一個AppWidgetProvider中,我創建並使用了一個RemoteViews對象,AFAIK沒有爲我提供一個方法來獲取對佈局中ImageView的引用,以便在動畫上調用start()。當widget顯示時,也沒有處理程序或回調,所以我可以進行start()調用。

有沒有另一種方法可以做到這一點?我想我可以用自己的onUpdate()調用自己動畫,但這看起來非常昂貴。

回答

5

不要爲應用程序小部件設置動畫效果,除非您自己寫主屏幕應用程序。

你是正確的,你沒有辦法操縱AnimationDrawableAnimation讓他們與一個應用程序部件一起工作。

你也是正確的,「窗口部件上的onUpdate()調用非常快......看起來非常昂貴」,因爲它是。應用程序小部件的更新涉及您的AppWidgetProvider與託管主屏幕的進程之間的進程間通信。該系統設計用於每30分鐘左右更新一次,而不是每秒30幀。

+1

如果我想在TripeAdvisor應用程序上創建像刷新圖標這樣的動畫按鈕,我該怎麼做? – 2015-03-14 11:39:31

+0

這是否包含android API內的簡單動畫?例如,一個自定義的progressBar drawable可以旋轉應用程序的圖像?什麼是可能的,什麼是不可能的? – 2015-05-17 14:57:14

+0

@androiddeveloper:基本上,您可以在用於「RemoteViews」的佈局資源中表達任何動畫。任何需要你在視圖,動畫等方面調用方法的東西都不會。此外,由於權力和注意力分散的原因,連續的動畫可能會被用戶看作是消極的。 – CommonsWare 2015-05-17 15:12:08

6

我目前正在創建一個「需要」精靈動畫的部件,並且我已經寫了一篇關於如何animate home widget的博客文章。是的,這樣做很昂貴,所以我只在需要小部件時才這樣做。 BTW,遠程視圖不支持原始的android動畫。

編輯:

Demo Project is up.

5

小工具,可用於在遠程視窗是進度。它會自動生成,不會咀嚼資源。一個正方形的in-determinant ProgressBar會覆蓋主屏幕appwidget。見sample code from Android site

4

另一種選擇動畫的窗口小部件是使用ViewFlipper,其中一個可以使用inAnimationoutAnimation

<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:flipInterval="5000" 
      android:autoStart="true" 
      android:inAnimation="@android:anim/fade_in" 
      android:outAnimation="@android:anim/fade_out" 
      android:animateFirstView="true"/> 
2

創建自定義動畫。 創建ProgressBar並在android:indeterminateDrawable中設置您的動畫。 將ProgressBar添加到您的小部件佈局並使其可見(不可見)

相關問題