通知栏自定义视图中的动画

11
据我所知,我们可以使用通知管理器(Notification Manager) + 远程视图(Remote Views)在Android中创建通知。
我正在为下载MP3文件创建通知。我想要在旁边添加动画。目前从论坛上了解到这是不可能的。
但是,我看到一个Android应用程序的视频,在下载时显示并播放了旁边的动画。 链接:http://www.youtube.com/watch?v=yNcs-sS2nFU&feature=related 有人能告诉我实现这一点的最佳方法吗?

视频看起来像是来自 Froyo 或 Gingerbread。你可以查看 NotificationBuilder 类,它可以让你设置进度值来实现你在视频中看到的水平条。 - iHearGeoff
2个回答

26
我发现在通知中展示自定义动画的最佳方法是将AnimationDrawable作为资源使用,带有一个ID。当您发布通知时,只需指定可绘制资源ID即可。不需要其他代码来更新动画的每一帧,AnimationDrawable已经为您处理了这个问题。
以下是文档链接:http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html 例如,您需要执行以下步骤:
1. 将一个XML文件(例如“wheelAnim.xml”)添加到您的res/drawable/文件夹中,内容如下:
<!-- Animation frames are wheel0.png -- wheel5.png files inside the
     res/drawable/ folder -->
 <animation-list android:id="selected" android:oneshot="false">
    <item android:drawable="@drawable/wheel0" android:duration="50" />
    <item android:drawable="@drawable/wheel1" android:duration="50" />
    <item android:drawable="@drawable/wheel2" android:duration="50" />
    <item android:drawable="@drawable/wheel3" android:duration="50" />
    <item android:drawable="@drawable/wheel4" android:duration="50" />
    <item android:drawable="@drawable/wheel5" android:duration="50" />
</animation-list>
  • 在刚创建的xml文件中,为animation-list添加每个可绘制引用(无论是PNG还是其他图像格式),并将其放置在res/drawable/文件夹中。

  • 在代码中使用动画列表的资源ID(此示例中为“R.drawable.wheelAnim”)。例如:

  • Notification notification = new Notification(R.drawable.wheelAnim, null,
        System.currentTimeMillis());
    
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
        new Intent(), 0);
    
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    
    notification.setLatestEventInfo(this, getText(R.string.someTitle),
        getText(R.string.someText), pendingIntent);
    
    ((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).notify(
        uid, notification);
    

    2
    我尝试在较新的NotificationBuilder类中使用动画drawable作为小图标,在状态栏中看起来很棒。然而,当您拉下通知抽屉时,图标不会动画。有人有这方面的经验吗?您是否成功地使图标在下拉视图中动画? - iHearGeoff
    我在哪里可以获取那些轮子图片的部分? - Abhijit
    @iHearGeoff,你确定在下拉通知时没有看到大图标吗? - Brill Pappin

    2
    在创建状态栏通知的文档中,它说您可以通过更改Notification类的iconLevel属性,在定义在LevelListDrawable中的一组图像之间进行循环。引用如下:

    iconLevel字段

    此值指示用于通知图标的LevelListDrawable的当前级别。您可以通过将此值更改为与LevelListDrawable中定义的绘制对象相关联来在状态栏中动画显示图标。有关详细信息,请参见LevelListDrawable的参考文献。


    我知道这一点,但我的问题是如何对remoteView对象进行动画处理。我正在发送通知,以达到动画效果。但线程在3000毫秒后才发布,如果我将值减少到2000毫秒以下,则模拟器会在几次更新后挂起,而我希望设备的反应方式相同。视频展示了非常有趣的内容,它使用100毫秒至500毫秒的延迟来对对象进行动画处理,这让我感到惊讶。 - Pinser

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