是否可以在通知窗口(Android)上制作动画图标

时间:2012-09-07 20:24:04

标签: java android statusbar android-notifications

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

1 个答案:

答案 0 :(得分:2)

您引用的问题中的视频(我承认我没有看到与我给出的链接相同)清楚地显示了那里的动画图标。大约在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类似的想法(再次使用相同的SO问题),其中Roman10获得默认的Android图像

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

修改

因此,据我所知,最终RemoteViews不支持图像资源中的动画。但我找到了一种方法来解决这个问题并且它可能很昂贵,但我还没有对其进行分析以了解CPU的使用情况。

我从罗马10(上面的链接)的代码开始,做了一些修改。

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上得到了阴阳,并使用ImageMagick命令行(ubuntu)拆分它。