有没有一种方法可以在主屏幕小部件上添加动画效果?

14
我想在主页小部件上使用动画,即一个AppWidgetProvider。我希望使用 "Frame Animation" 技术:http://developer.android.com/guide/topics/graphics/2d-graphics.html#frame-animation,这在活动中已经成功使用了。但是我无法将该代码翻译成 AppWidgetProvider。
基本上,在 AppWidgetProvider 中,我创建并使用 RemoteViews 对象,据我所知,它没有提供一种方法让我获取布局中 ImageView 的引用,以便调用 start() 方法来启动动画。同时也没有处理程序或回调函数,用于小部件显示时进行 start() 调用。
还有其他的方法吗?我认为我可能可以通过很快的 onUpdate() 调用自己来完成动画,但那看起来非常耗费资源。
5个回答

7
不要为应用程序小部件添加动画,除非您编写自己的主屏幕应用程序。
您是正确的,您无法操纵AnimationDrawable或Animation使其与应用程序小部件一起工作。
您也是正确的,“小部件上非常快的onUpdate()调用似乎非常昂贵”,因为它确实如此。应用程序小部件的更新涉及到进程间通信,即在您的AppWidgetProvider和托管主屏幕的进程之间进行通信。该系统设计用于每30分钟左右更新一次,而不是每秒30帧。

1
如果我想要创建一个像TripAdvisor应用程序上的刷新图标一样的动画按钮,我该怎么做? - S.M_Emamian
这是否包括 Android API 内部的简单动画?例如,自定义的进度条 drawable,它会旋转应用程序图像?什么是可能的,什么是不可能的? - android developer
@androiddeveloper:基本上,您可以在用于RemoteViews的布局资源中表达的任何动画都应该能够工作。任何需要您在视图、动画等上调用方法的内容都不行。此外,长时间持续的动画可能会因为功耗和干扰等原因而受到用户的负面评价。 - CommonsWare
@CommonsWare 我需要使用一个永远旋转的图像(用于小部件的加载阶段,就像启动设备时一样),就像progressBar一样。这可能吗? - android developer
1
@androiddeveloper:欢迎尝试指向“AnimationDrawable”资源的“ImageView”。或者尝试一个不确定的“ProgressBar”。我两个都没有尝试过。 - CommonsWare
@CommonsWare 我认为无限进度条(如此处所示:https://dev59.com/7G855IYBdhLWcg3waDeR#26121696)比AnimationDrawable更好,因为它不需要逐帧创建。顺便说一下,它也能正常工作... :) - android developer

7
我目前正在创建一个需要雪碧动画的小部件,并在博客文章中介绍了如何 为主页小部件添加动画。是的,这样做很费时,所以只有在需要小部件时才会这么做。顺便说一下,在远程视图中不支持原始的Android动画。

编辑:

演示项目已上线。


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"/>

6

在RemoteView中可用的一个小部件是ProgressBar。它会自动播放动画,不会占用太多资源。一个不确定的ProgressBar(一个正方形)可以很好地覆盖在主屏幕小部件上。请参见来自Android网站的示例代码


5

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接