代码之家  ›  专栏  ›  技术社区  ›  Adrian

Android主屏幕小部件动画

  •  32
  • Adrian  · 技术社区  · 14 年前

    我正在研究创建一个支持动画的小部件,最好是通过android.view.animation框架,否则通过在后台服务触发的代码中设置远程视图的属性。

    有没有人对这两种方法都有经验,我正在尝试的是可行的,还是我正走向一条死胡同?

    5 回复  |  直到 13 年前
        1
  •  14
  •   Jeremy Edwards    13 年前

    实际上可以设置远程视图小部件的动画。问题在于,由于在系统进程中运行自定义代码会带来安全隐患,因此设计时对其进行了严格限制。

    我的意思是,Android只能处理那些以res/anim XML文件表示的动画,这些文件通过XML绑定到布局。一些远程视图小部件支持此功能

    一个例子是股票安卓系统上的新闻和天气应用程序小部件。它所做的是使用一个视图翻转器每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>
    

    在本例中,您可以将挂起的意图绑定到每个文本视图。因此,当用户单击任何一个时,可能会发生不同的操作。

    最后,Android已经慢慢地在每个版本中添加了对动画视图的支持。例如,在Android3.0之前,transitiondrawables(交叉淡入选择器drawable)不会交叉淡出。

        2
  •  2
  •   Orest    13 年前

    你的小部件上只能有Fadein或FadeOut这样的简单动画,非常简单,你不需要任何布局动画,只需要使用ViewFlipper(我花了3天的调查才发现这很简单)。

    然而,如果不使用定制的启动程序,就不可能写出真正伟大的东西。

        3
  •  2
  •   xandy    13 年前

    这是可能的,但是要小心使用它,因为它对于默认的主屏幕实现来说非常沉重,您不应该经常使用它。

    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调用替换位图视图的位图。

        4
  •  1
  •   Amir Uval    13 年前

    我同意这里的其他答案,所以我不会在一个小部件上重复有限的动画是可能的,但资源太多,这可能会使主屏幕慢,响应性差,电池排水器。根据我的经验-它运行不顺利。 所以底线是——如果只是几帧帧时间的变化,或者对于一些很少对事件产生影响的效果(例如用户按下按钮或您服务中的某个事件),就可以了。

    但这里有一个想法,可能不会直接回答您的问题,但可能是一个合适的替代方案(我不知道您的用例,它可能根本不相关) 你有没有考虑使用实况壁纸?

    赞成- 高质量动画, 可以从后台控制

    缺点- 不是交互式的, 替换用户的墙纸…很难满足每个人的口味

        5
  •  0
  •   Community CDub    8 年前

    在远程视图上动画是不可能的,并且远程视图更新可能以每30分钟(或手动)一次的速率发生…

    无论如何,您可以尝试以下链接: is-there-a-way-to-animate-on-a-home-widget