有没有办法在Home Widget上制作动画?

时间:2010-04-02 04:37:49

标签: android

我想在主页面板上使用动画,即AppWidgetProvider。我希望使用“帧动画”技术:

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

我在一项活动中成功使用过。但我无法将该代码转换为AppWidgetProvider。

基本上,在AppWidgetProvider中,我创建并使用RemoteViews对象,AFAIK没有为我提供在布局中获取对ImageView的引用的方法,以便我在动画上调用start()。小部件显示时也没有处理程序或回调,因此我可以进行start()调用。

还有其他办法吗?我想我可以通过在窗口小部件上进行非常快速的onUpdate()调用来自己动画,但这看起来非常昂贵。

5 个答案:

答案 0 :(得分:7)

我目前正在创建一个“需要”精灵动画的小部件,我已经发布了一篇关于如何animate home widget的博文。是的,这样做很昂贵,所以我只在需要小部件时才这样做。 BTW,远程视图不支持原始的Android动画。

编辑:

Demo Project is up.

答案 1 :(得分:6)

除非您编写自己的主屏幕应用程序,否则不要为应用程序小部件设置动画。

你是正确的,你没有办法操纵AnimationDrawableAnimation让他们使用app小部件。

你也是正确的“非常快的onUpdate()调用小部件......看起来非常昂贵”,因为它是。应用程序小部件的更新涉及您的AppWidgetProvider与托管主屏幕的进程之间的进程间通信。该系统设计为每30分钟左右更新一次,而不是每秒30帧。

答案 2 :(得分:6)

可在RemoteView中使用的一个Widget是ProgressBar。它会激活自己,不会咀嚼资源。一个正方形的ProgressBar是一个正方形,可以很好地覆盖在主屏幕appwidget上。见sample code from Android site

答案 3 :(得分:6)

动画窗口小部件的另一个选项是使用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"/>

答案 4 :(得分:5)

创建自定义动画。 创建ProgressBar并在android中设置:indeterminateDrawable你的动画。 将ProgressBar添加到窗口小部件布局并使其可见(不可见)