2010-07-29 214 views
32

我正在研究創建一個支持動畫的小部件,理想情況下是通過android.view.animation框架,否則通過在由後臺服務觸發的代碼中設置遠程視圖的屬性。Android主屏幕小部件動畫

有沒有人有這兩種方法中的任何經驗,而這也正是我想是可行的,還是我領導了一個死衚衕?

+0

展望同,如果你現在就完成了,如果你可以在這裏分享你的解決方案,那將是很好的。 – Bachi 2011-08-15 11:01:37

+1

當然 - 會試圖找時間寫出來。本質上,訣竅是定義內置初始動畫的佈局,然後在需要動畫時設置這些佈局。 IIRC你需要切換到一個新的佈局來觸發動畫,所以你可能需要多個佈局,使用相同的動畫和它們之間的替代。一旦動畫完成,設置一個定時器切換回非動畫版本的小部件也很有用 - 否則返回到主屏幕可以再次觸發動畫。 – Adrian 2011-08-19 11:42:35

+0

你想通過後臺服務,佈局或動畫來控制哪一個?你能否詳細描述這個問題? – MoiTempete 2012-01-13 08:36:27

回答

12

它實際上是可能的動畫遠程視窗部件。問題在於它是超級限制性的,因爲在系統進程中運行自定義代碼所帶來的安全隱患。

我的意思是說Android將只與在通過XML綁定到佈局RES /阿尼姆XML文件表示動畫工作。一些遠程視窗部件支持此

這方面的一個例子是來自一個普通的Android系統的新聞和天氣應用程序部件。它正在做的是使用ViewFlipper每10秒左右循環播放每個新聞報道。

<ViewFlipper android:layout_width="match_parent" android:layout_height="wrap_content" android:measureAllChildren="true" android:flipInterval="10000" android:autoStart="true" 
android:inAnimation="@android:anim/fade_in" android:outAnimation="@android:anim/fade_out" android:animateFirstView="true"> 
     <TextView android:id="@+id/Description1TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
     <TextView android:id="@+id/Description2TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
     <TextView android:id="@+id/Description3TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
     <TextView android:id="@+id/Description4TextView" style="@style/AWCText.Centered" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
    </ViewFlipper> 

在此示例中,您可以將未決意圖綁定到每個TextView。所以當用戶點擊任何一個時,就可能發生不同的操作。

最後,Android在每個版本中都緩慢地添加了對動畫視圖的支持。例如,TransitionDrawables(交叉淡化選擇器drawable)不會交叉淡出,直到Android 3.0。

2

你可以只有簡單的動畫,比如fadeIn或者fadeout,這很簡單,你不需要任何佈局動畫,只需要使用ViewFlipper(花了我3天的時間調查才發現它很容易)。

但它的imposiible寫的東西真的很棒,而無需使用自定義的發射

2

這是可能的,但謹慎使用它,因爲它是非常沉重的默認主屏幕實現,你不應該經常使用它。

Mario Coin Block widget,我使用這樣的技術做動畫,你可以檢出的源代碼:http://code.google.com/p/mario-coin-block/source/browse/trunk/MarioWidget.CoinBlock/src/com/gueei/mario/coinBlock/view/CoinBlockView.java

基本思路是手動上一個屏幕外的位圖繪製,並使用RemoveViews它取代BitmapView的位圖呼叫。

1

我同意在這裏其他的答案,所以我不會再迭代 - 上的小工具有限動畫是可能的,但沉重的資源,它可能使主屏幕緩慢和較不敏感,並且電池排水。從我的經驗來看 - 它運行不順暢。 所以底線是 - 沒關係,如果它只是幾個幀不時變化,或者對於某些事件很少發生在某個事件(例如用戶按下或您的服務中的某個事件)

但是,這裏有一個想法並不直接回答你的問題,但可能是一個合適的選擇(我不知道你的用例,它可能根本不相關) 你是否考慮實現一個動態壁紙?

利弊 - 最高品質的動畫, 可以從背景

利弊進行控制 - 沒有互動, 替換用戶的壁紙...,很難滿足每個人的口味