【问题标题】:Is it possible to make an animation icon on the notifications window (Android)是否可以在通知窗口(Android)上制作动画图标
【发布时间】:2012-09-07 20:24:04
【问题描述】:

我做了一些研究,发现扩展状态栏区域可以有一个进度条,但我仍然不确定动画图标是否可能。 我已经尝试过这个问题的答案:Animation in Notification bar Custom View。但是,该图标不是动画的。 如果不可能,您能否指出任何证实这一点的文件? 提前致谢。

【问题讨论】:

  • 我不知道如何立即执行此操作,但执行此操作的应用程序示例是 Podkicker。当您下载文件以供离线收听时,它是动画的。这些有帮助吗? stackoverflow.com/questions/9216616/…stackoverflow.com/questions/4688052/…
  • 我正在检查 Podkicker。无论如何,您提到的 SO 问题与我想要的不同。这个问题实际上是关于 ImageView 上的动画。
  • @Jim 我检查了 Podkicker。这和我想要的不一样。我的要求是扩展状态栏区域中的动画图标(当用户下拉通知栏时显示)。无论如何,谢谢。
  • 这很有趣,因为我链接了两个问题,一个标题为“Android 状态栏中的动画”,另一个标题为“通知栏 Cutsom 视图中的动画”。也许是我自己尝试做的时候了:-)
  • “通知栏Cutsom视图中的动画”中链接的视频显示了我认为您在谈论的内容。

标签: java android statusbar android-notifications


【解决方案1】:

您引用的问题中的视频(我承认我没有看到与我提供的链接之一相同)在那里清楚地显示了一个动画图标。大约在 0 点 35 分。 http://www.youtube.com/watch?v=yNcs-sS2nFU&t=0m32s(此链接跳转到该部分)。箭头有一条小黑线反复向下移动。对我来说似乎是动画。这就是你想要的吗?

无论如何,它是在哪个 Android 版本上运行的?可能是 T-Mobile 定制的,我不知道,只是 YouTube 上的一些视频。

您可以为通知创建自定义视图,例如:http://www.roman10.net/android-custom-notification-with-progress-bar/ 您可以使用类似的想法和 animation drawable(同样的问题再次出现),其中 Roman10 获得了默认的 android 图像。

RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.noti);
contentView.setImageViewResource(... your animated resource ...);

编辑

因此,据我所知,RemoteViews 最终不支持图像资源中的动画。但我想出了一种解决方法,它可能很昂贵,但我还没有分析它来查看 CPU 使用情况。

我从 roman10 的代码开始(上面的链接)并进行了一些修改。

yinyangAnim.xml + 动画帧.png 文件

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
    <item android:drawable="@drawable/yinyang0" android:duration="150" />
    <item android:drawable="@drawable/yinyang1" android:duration="150" />
    <item android:drawable="@drawable/yinyang2" android:duration="150" />
    <item android:drawable="@drawable/yinyang3" android:duration="150" />
    <item android:drawable="@drawable/yinyang4" android:duration="150" />
    <item android:drawable="@drawable/yinyang5" android:duration="150" />    
</animation-list>

添加另一个线程创建到开始按钮点击:

             new Thread(new Runnable() {
                    public void run() {
                        int frameIndex = 0;
                        mRun = true;
                        while (mRun) {
                            ++frameIndex;
                            SystemClock.sleep(100);
                            BitmapDrawable frame = (BitmapDrawable) yinyangAnimation.getFrame(frameIndex);
                            noti.contentView.setImageViewBitmap(R.id.status_icon, frame.getBitmap());
                            nm.notify(STATUS_BAR_NOTIFICATION, noti);
                            if (frameIndex >= yinyangAnimation.getNumberOfFrames()-1) {
                                frameIndex = 0;
                            }
                        }

                    }
                  }).start();

添加到 ProgressBarNotificationActivity.onCreate()

     ImageView yinyang = new ImageView(this);
     yinyang.setBackgroundResource(R.drawable.yinyang_anim);
     yinyangAnimation = (AnimationDrawable) yinyang.getBackground();

当然还有私有变量:private AnimationDrawable yinyangAnimation;

按下应用程序中的开始按钮并查看通知会为我显示旋转的阴阳。我在 loadinfo.net 获得了 yin-yang 并使用 ImageMagick 命令行 (ubuntu) 将其拆分。

【讨论】:

  • 感谢您的回答。视频上的图标真的很动画。但是,我遵循了您的回答,但仍然无法正常工作。我分叉了你提到的项目,并按照你的建议添加了动画部分。我的代码位于github.com/pt2121/roman10-android-tutorial/tree/master/… 我的动画代码在 ImageView 上运行良好,但在 RemoteViews (StatusBar) 上运行良好。不知道我错过了什么。
  • 我也试过stackoverflow.com/questions/4688052/…这个答案。我无法让它工作。如果代码适合您,是否可以分享您的示例项目?赞赏。
  • 它有效。谢谢。虽然我认为它很昂贵,因为通知是重复发送的,但我接受了你的回答。
  • 很高兴我能帮上忙。回答这些问题也总能教会我一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多