我想在主页面板上使用动画,即AppWidgetProvider。我希望使用“帧动画”技术:
http://developer.android.com/guide/topics/graphics/2d-graphics.html#frame-animation
我在一项活动中成功使用过。但我无法将该代码转换为AppWidgetProvider。
基本上,在AppWidgetProvider中,我创建并使用RemoteViews对象,AFAIK没有为我提供在布局中获取对ImageView的引用的方法,以便我在动画上调用start()。小部件显示时也没有处理程序或回调,因此我可以进行start()调用。
还有其他办法吗?我想我可以通过在窗口小部件上进行非常快速的onUpdate()调用来自己动画,但这看起来非常昂贵。
答案 0 :(得分:7)
我目前正在创建一个“需要”精灵动画的小部件,我已经发布了一篇关于如何animate home widget的博文。是的,这样做很昂贵,所以我只在需要小部件时才这样做。 BTW,远程视图不支持原始的Android动画。
编辑:
答案 1 :(得分:6)
除非您编写自己的主屏幕应用程序,否则不要为应用程序小部件设置动画。
你是正确的,你没有办法操纵AnimationDrawable
或Animation
让他们使用app小部件。
你也是正确的“非常快的onUpdate()调用小部件......看起来非常昂贵”,因为它是。应用程序小部件的更新涉及您的AppWidgetProvider
与托管主屏幕的进程之间的进程间通信。该系统设计为每30分钟左右更新一次,而不是每秒30帧。
答案 2 :(得分:6)
可在RemoteView中使用的一个Widget是ProgressBar。它会激活自己,不会咀嚼资源。一个正方形的ProgressBar是一个正方形,可以很好地覆盖在主屏幕appwidget上。见sample code from Android site
答案 3 :(得分:6)
动画窗口小部件的另一个选项是使用ViewFlipper
,其中可以使用inAnimation
和outAnimation
:
<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添加到窗口小部件布局并使其可见(不可见)