理想的にはAndroid.view.animationフレームワークを介して、アニメーションをサポートするウィジェットを作成することを検討しています。それ以外の場合は、バックグラウンドサービスからトリガーされるコードでリモートビューのプロパティを設定します。
誰かがこれらのアプローチのいずれかを経験したことがありますか、そして私が実行しようとしていることですか、それとも私は盲目の路地に向かっていますか?
RemoteViewウィジェットをアニメーション化することは実際に可能です。問題は、システムプロセスでカスタムコードを実行することのセキュリティへの影響のために、設計上非常に制限されていることです。
これが意味するのは、Androidは、xmlを介してレイアウトに関連付けられたres/animxmlファイルで表現されたアニメーションでのみ機能するということです。一部のRemoteViewウィジェットはこれをサポートしています。
この例は、ストック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(クロスフェードセレクタードローアブル)は、Android 3.0。
可能ですが、デフォルトのホーム画面の実装には非常に重く、あまり頻繁に使用するべきではないため、注意して使用してください。
マリオコインブロックウィジェット で、私はアニメーションを行うためにそのようなテクニックを使用しています、あなたはソースコードをチェックアウトすることができます: http://code.google.com/p/mario-coin -block/source/browser/trunk/MarioWidget.CoinBlock/src/com/gueei/mario/coinBlock/view/CoinBlockView.Java
基本的に、アイデアはオフスクリーンのビットマップに手動で描画し、RemoveViews呼び出しを使用してビットマップビューのビットマップをそれに置き換えます。
ウィジェットにはfadeInやfadeOutなどの単純なアニメーションしかありません。非常に単純で、レイアウトアニメーションは必要ありません。ViewFlipperを使用するだけです(非常に簡単であることがわかるまでに3日かかりました)。
それでも、カスタムランチャーを使用せずに本当に素晴らしいものを書くことは不可能です
私はここで他の答えに同意するので、繰り返しません-ウィジェットでの制限されたアニメーションは可能ですが、リソースが重いため、ホーム画面が遅くなり、応答性が低下し、バッテリーが消耗する可能性があります。私の経験から-それはスムーズに実行されません。つまり、重要なのは、フレームが数フレームしか変わらない場合や、イベントにほとんど影響を与えない場合(たとえば、ユーザーのプレスやサービスからのイベントなど)は問題ありません。
しかし、おそらくあなたの質問に直接答えることはないかもしれませんが、適切な代替案かもしれないという考えがあります(あなたのユースケースはわかりません、まったく関係がないかもしれません)ライブ壁紙の実装を検討しましたか?
長所-最高品質のアニメーション、バックグラウンドから制御できます
短所-インタラクティブではなく、ユーザーの壁紙を置き換えます...そしてみんなの好みを満足させるのは難しいです
RemoteViewsではアニメーションは不可能であり、RemoteViewsの更新は30分に1回(または手動で)発生する可能性があります...
とにかく、次のリンクを試すことができます: is-there-a-way-to-animate-on-a-home-widget