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

Android 通知栏自定义视图中的动画,android,animation,widget,android-layout,push-notification,Android,Animation,Widget,Android Layout,Push Notification,据我所知,我们可以使用通知管理器+远程视图在Android中创建通知 我正在创建下载Mp3文件的通知。我想在它旁边放一个动画。到目前为止,我从论坛上了解到这是不可能的 然而,我看到了一个android应用程序的视频,它在下载时下载并在旁边显示动画。 链接: 有人能告诉我实现它的最佳方法吗 在用于创建状态栏通知的中,它说您可以通过更改类的iconLevel属性,循环浏览在中定义的一组图像: iconLevel字段 此值表示用于该应用程序的LevelListDrawable的当前级别 通知图标。通过

据我所知,我们可以使用通知管理器+远程视图在Android中创建通知

我正在创建下载Mp3文件的通知。我想在它旁边放一个动画。到目前为止,我从论坛上了解到这是不可能的

然而,我看到了一个android应用程序的视频,它在下载时下载并在旁边显示动画。 链接:

有人能告诉我实现它的最佳方法吗

在用于创建状态栏通知的中,它说您可以通过更改类的
iconLevel
属性,循环浏览在中定义的一组图像:

iconLevel字段

此值表示用于该应用程序的LevelListDrawable的当前级别 通知图标。通过将此值更改为,可以在状态栏中设置图标动画 与LevelListDrawable中定义的drawable关联。请参见LevelListDrawable 有关更多信息,请参阅


我发现在通知中显示自定义动画的最佳方法是使用AnimationDrawable作为具有ID的资源。然后在发布通知时只需指定可绘制的资源ID。不需要进一步的代码来更新动画的每一帧。可绘制的动画将为您处理该问题

以下是指向文档的链接:

例如,您需要:

  • 将包含以下内容的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>
    

  • 我知道这一点,但我的问题是设置remoteView对象的动画。我正在做的是一次又一次地发送通知,从而产生动画效果。但是线程在3000ms后发布,如果我将该值减小到2000ms以下。我的模拟器在几次更新后挂起,我希望设备也会以同样的方式做出反应。视频显示了一些非常有趣的东西,它以100毫秒-500毫秒的延迟为对象设置动画。这让我感到惊讶。我在新的NotificationBuilder类中尝试了动画绘图作为小图标,它在状态栏中看起来很棒。但是,当您下拉通知抽屉时,图标不会设置动画。有人对此有过经验吗?你是否成功地在下拉视图中将图标设置为动画?我在哪里可以获得这些车轮图像部分?@iHearGeoff你确定当你下拉时,它不是通知中的大图标吗?视频看起来像是来自Froyo或Gingerbread。您应该查看NotificationBuilder类,该类允许您设置进度值以实现视频中显示的水平条。
    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);