2010-07-29 163 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

我同意在这里其他的答案,所以我不会再迭代 - 上的小工具有限动画是可能的,但沉重的资源,它可能使主屏幕缓慢和较不敏感,并且电池排水。从我的经验来看 - 它运行不顺畅。 所以底线是 - 没关系,如果它只是几个帧不时变化,或者对于某些事件很少发生在某个事件(例如用户按下或您的服务中的某个事件)

但是,这里有一个想法并不直接回答你的问题,但可能是一个合适的选择(我不知道你的用例,它可能根本不相关) 你是否考虑实现一个动态壁纸?

利弊 - 最高品质的动画, 可以从背景

利弊进行控制 - 没有互动, 替换用户的壁纸...,很难满足每个人的口味