`
zhujianjia
  • 浏览: 487716 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转:notification更新数字的显示及AnimationDrawable的结合使用

 
阅读更多

 

这是本人加入博客园的首篇博文,自己平常在工作学习过程遇到难题时通过搜索引擎搜的技术文章中会时不时看到博客园的精品文章,让我很受益,很多人都觉得程序员的生活是很枯燥的工作,但是通过博文让我看到了原来技术也可以升华为一种艺术,通过自已的用心修饰,作为程序员的我也应该向各位学习,把自己工作学习中的心得可以记录下来,让自己在成长路上随时参阅,并督促自己用心专研,当然也让大家帮忙指正教导呵!!

  好了,开篇就不多费话了,接下来我要记录的实际上是android开发中很小的一个功能,一个控件的使用-------Notification,没什么难点,但是我觉得在开发中还是有些需求会被用到,于是记录下来供参考,效果如下:

 


一、Notification中图标上显示数字【在类似于market软件中如软件更新的通知时可以通过此功能来实现】

       要想让Notification以ICON的形式显示于Status Bar中,必须设置里面的icon属性,对于这样一种需求:App Market都会对软件的更新版本进行相应的提示,通常都会以Notification这种形式来告诉用户目前存在的更新数量,于是在一个ICON上显示数字就很有必要了。

      通常对于这种需求我们会想到用事先准备好的不同数字的ICON来根据实际数量来替换,但是这种方式是太过于笨拙,实际android对于这样的需求已经为我们准备好了,对于Notification除了icon这个常见属性之外还有number,我们可以利用它很轻松实现这样的需求

  二、Notification和AnimationDrawable的结合使用【典型的就是brower中下载通知在Status Bar会以动画的形式展现,给用户以直观的体验】

      通常我们在Status Bar上会看到不同的状态图标,如:电量,信号,会根据不同的情况以动画的形式展现,而android默认的brower的下载通知也会以动画形式出现,这样会给用户一个非常直观的体验,接下来就以brower的下载通知形式实现自己的效果。

      首先关键点是认识AnimationDrawable这个类,具体请参见:/ANDROID_HOME/windows/docs/reference/android/graphics/drawable/AnimationDrawable.html,实际它是一个Frame Animation,通过图片叠加来最终产生一个动画的drawable,最终将Notification的icon指向自己定义的这个动画drawable就可达到动画的效果。

下面贴上完整DEMO的代码:

  ① main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button
        android:id="@+id/button1"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:text="新增数通知"
        />
    <Button
        android:id="@+id/button2"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
        android:text="开始下载通知"
        />
</LinearLayout>

 

 

②定义自己的AnimationDrawable

    a、首先在工程中的drawable中新建  ic_stat_download.xml,如下:


b、ic_stat_download.xml,关于此次的写法请参见官方文档AnimationDrawable一章

 

 

 

<?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/stat_sys_download_anim0" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim1" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim2" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim3" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim4" android:duration="200" />
    <item android:drawable="@drawable/stat_sys_download_anim5" android:duration="200" />
</animation-list>

 

      drawable中的资源还可以有几张图片拼成,如显示电池电量是可以分别用一个电池和数字的图片拼成一个图片,在设置为notification的icon

<?xml version="1.0" encoding="utf-8"?>
<layer-list
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/battery_bg" />
    <item android:drawable="@drawable/battery_digit_97" />
</layer-list>
 效果如图


      

 

c、用到的素材依定义的顺序如下,右击图标另存为重命名再放入工程中既可:


                         
 
 ③Activity,我测试的类名为NotificationActivity

 

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * Notification简单测试,这里只展示了关键功能,可以根据自身的需求去扩展自己的Notification
 * @author dev
 *
 */
public class NotificationActivity extends Activity {

    static int counter = 1;//用来模拟更新数字的静态变量
    private NotificationManager nm;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.notification);
        nm = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Notification n = new Notification();
                n.icon = R.drawable.icon;
                n.number = counter++;//此处既实现数字更新的关键属性
                n.tickerText = "新消息";
                n.flags = Notification.FLAG_AUTO_CANCEL;
                n.setLatestEventInfo(NotificationActivity.this, "test", "test", PendingIntent.getActivity(
                        NotificationActivity.this, 0, new Intent(), 0));
                nm.notify(1, n);
            }
        });
        Button button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Notification n = new Notification();
                n.icon = R.drawable.ic_stat_download;//此处的drawable为在drawable文件夹中定义的
                n.tickerText = "开始下载";
                n.flags = Notification.FLAG_AUTO_CANCEL;
                n.setLatestEventInfo(NotificationActivity.this, "test", "test", PendingIntent.getActivity(
                        NotificationActivity.this, 0, new Intent(), 0));
                nm.notify(2, n);
            }
        });
    }
}

 

 

好了,就写到这,平时写博客也写得少,请大家指教,这篇单从技术层面上没啥含量,只是把自己认为需要记录的做个备忘,再者就是希望跟大家一起谈讨android,希望大家也能多多共享工作学习中的心得体会,我觉得参与博客的编写可以充实程序的魅力,更好的管理自己的知识,希望让大家共同提高呵,下篇再见!!<(@ ̄︶ ̄@)>

 

  • 大小: 383.9 KB
  • 大小: 5.5 KB
  • 大小: 183 Bytes
  • 大小: 218 Bytes
  • 大小: 301 Bytes
  • 大小: 399 Bytes
  • 大小: 429 Bytes
  • 大小: 260 Bytes
  • 大小: 1.5 KB
分享到:
评论

相关推荐

    Unity3D教程:Notification Center的简单使用与案例说明2

    Unity3D Notification Center 的简单使用与案例说明 Notification Center 是 Unity3D 中的一个组件,用于处理游戏对象之间的消息传递。它允许游戏对象之间相互通信,实现了松耦合的设计,使得游戏逻辑更加灵活和可...

    Android notification+Service实时更新

    在Android开发中,`Notification`、`Service`和`BroadcastReceiver`是三个核心组件,它们在许多场景下都有着重要的作用,特别是在实现应用后台运行、实时更新等任务时。本项目"Android notification+Service实时更新...

    Notification中更新进度条

    "Notification中更新进度条"这个主题聚焦于如何在Notification上动态地显示任务的进度,比如下载、上传等操作。 首先,我们要了解`Notification`的基本结构。在Android中,`Notification`对象由`NotificationCompat...

    Android Notification更新

    例如,Android Oreo之前,可以使用`NotificationManager`,而Oreo及更高版本则推荐使用`NotificationManagerCompat`以确保兼容性。 综上所述,Android的通知机制提供了丰富的功能,让我们能够创建动态、交互式的...

    Android 下载 Notification通知栏显示

    最后,使用`NotificationManager`来显示Notification: ```java NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); manager.notify...

    自动更新:Dialog和Notification

    "自动更新:Dialog和Notification"这一主题涉及到如何优雅地提示用户进行应用更新,通常通过两种常见的方式:对话框(Dialog)和通知(Notification)。这两种方法各有特点,适用于不同的场景。 首先,让我们详细...

    Android NOtification 使用

    1. Toast Notification: Toast是一种短暂的通知方式,它在屏幕上显示一段时间后自动消失,不会抢占用户界面。适用于提供非关键性的信息提示,如“文件已保存”。使用Toast非常简单,只需通过`Toast.makeText()`...

    【原】Android多任务下载,使用Notification更新进度条

    不过,DownloadManager无法直接显示自定义的Notification,所以我们通常会结合使用。 3. **自定义Notification**: - 创建一个NotificationChannel(Android O及以上版本)和NotificationCompat.Builder,设置通知...

    android notification 软件更新

    在Android操作系统中,Notification是应用与用户交互的重要方式之一,特别是在软件更新的场景下,它起着关键的作用。本文将深入探讨Android Notification的功能、工作原理以及如何实现软件更新的通知。 一、Android...

    Notification的用法和PendingIntent使用

    4. 发送通知:使用 `NotificationManager` 的 `notify` 方法发送通知,并指定发送信息的显示图标和 Notification 对象。 在上面的代码中,我们首先获得了系统通知服务的管理类 `NotificationManager`,然后实例化了...

    Notification

    本文将深入探讨`Notification`的实现,并结合自定义`Dialog`消息展示来增强用户体验。 首先,`Notification`是Android应用程序与用户交互的重要方式,特别是在后台运行时。当应用程序需要告知用户一些信息,但不...

    android Notification使用大全

    创建渠道并将其关联到Notification: ```java NotificationChannel channel = new NotificationChannel("my_channel_id", "我的频道", NotificationManager.IMPORTANCE_DEFAULT); channel.setDescription("这是频道...

    android Notification详解

    2. 更新已发出的 Notification:使用相同的 `id` 和 `tag` 更新已存在的通知。 3. 点击 Notification:点击后,系统会根据 Notification 设置的 `PendingIntent` 启动关联的 Activity。 4. 清除 Notification:用户...

    iphone notification 使用实例

    本教程将基于“iphone notification 使用实例”这一主题,详细介绍如何在iPhone上实现通知功能。 首先,我们要了解iOS中的通知类型:本地通知(Local Notification)和远程通知(Remote Notification,通常与Apple ...

    Notification的使用示例各种效果

    在Android开发中,Notification是应用与用户交互的重要方式,它可以在状态栏中显示消息,即使应用在后台运行也能提醒用户。本示例主要探讨如何利用Notification API创建各种效果的提示,包括系统默认样式以及自定义...

    Android版本更新(Service下载 Notification进度条)

    本篇主要探讨如何使用`Service`、`Notification`以及进度条来实现一个优雅的后台下载更新过程。首先,我们需要理解`Service`在Android中的作用。 `Service`是Android四大组件之一,它在后台运行,不提供用户界面,...

    Notification最新用法、实现Notification的通知栏常驻、Notification的big View、解决Notification点击无效

    - 另一个常见方法是使用Foreground Service,它会显示一个持续的Notification,即使应用在后台运行也不会被系统杀死。 3. **Notification的big View样式** - big View是Android引入的一种扩展通知,可以展示更多...

    android Notification使用例子

    在Android系统中,Notification是一种非常重要的机制,它允许应用程序在状态栏显示提醒,即使用户不在应用界面也能感知到应用的状态或新消息。本项目是一个基于Android 2.3(Gingerbread)版本的小实例,旨在帮助...

    Android 8.0通知栏(Notification)适配

    目录这里我们分步解题:第一步:判断API第二步:NotificationChannel第三步:Notification第二个参数代码对比:拓展 这几天做一个小软件在API28(Android 9.0)的模拟器上测试时,发现通知栏无效,经过一番查询,...

Global site tag (gtag.js) - Google Analytics