Android设置桌面主要用到了WallPaperService这个类。首先创建自己的类继承WallPaperService并重写onCreateEngine()方法,创建自己的Engine。

1、创建自己的Engine类GifEngine 继承Engine,重写里面的onSurfaceCreated方法,onVisibilityChanged方法,onSurfaceDestroy方法。在onSurfaceCreate方法中加载gif动画,这里涉及到gif动画的加载与播放,涉及到Movie类,用movie解码gif文件然后画在canvas上,并重复一帧一帧的绘制。这样就能将gif动画渲染到surfaceView上呈现到屏幕。

onVisibilityChanged方法在桌面可见不可见的时候进行回调,当屏幕可见的时候进行播放,屏幕不可见取消gif绘制。onSurfaceDestroy销毁的时候销毁操作。类如下:

public class GIfWallPaperService extends WallpaperService {private Movie movie;
    private Handler handler;
    private boolean isVisible;
    private int height;
    private int width;
    private int gifWidth;
    private int gifHeigth;

    @Override
    public Engine onCreateEngine() {return new GifEngine();
    }class GifEngine extends Engine {@Override
        public void onSurfaceCreated(SurfaceHolder holder) {super.onSurfaceCreated(holder);
            handler = new Handler();
            try {InputStream inputStream = getContentResolver().openInputStream(Config.filePath);
                movie = Movie.decodeStream(inputStream);
                DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
                height = displayMetrics.heightPixels;
                width = displayMetrics.widthPixels;
                gifWidth = movie.width();
                gifHeigth = movie.height();
            } catch (FileNotFoundException e) {e.printStackTrace();
            }}@Override
        public void onVisibilityChanged(boolean visible) {if (visible) {isVisible = true;
                handler.post(runnable);
            } else {isVisible = false;
                handler.removeCallbacks(runnable);
            }}@Override
        public void onSurfaceDestroyed(SurfaceHolder holder) {super.onSurfaceDestroyed(holder);
            handler.removeCallbacks(runnable);
        }
        private Runnable runnable = new Runnable() {@Override
            public void run() {if (isVisible) {                    Canvas canvas = getSurfaceHolder().lockCanvas();
                    canvas.save();
                    canvas.scale(2 , 2 );
                    movie.draw(canvas, 0, 0);
                    movie.setTime((int) (System.currentTimeMillis() % movie.duration()));
                    canvas.restore();
                    getSurfaceHolder().unlockCanvasAndPost(canvas);

                    handler.postDelayed(runnable, 50);   //50ms表示每50m绘制一次
                }}};
    }
}

2、配置AndroidMainfest.xml

<service android:name=".service.GIfWallPaperService"
         android:label="@string/gif_wallpaper"
         android:permission="android.permission.BIND_WALLPAPER">
    <intent-filter>
        <action android:name="android.service.wallpaper.WallpaperService" />
    </intent-filter>

    <meta-data
        android:name="android.service.wallpaper"     
      android:resource="@xml/gif_wallpaper" />
</service>

3、配置gif_wallpaper.xml

<?xml version="1.0" encoding="utf-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android"
    android:thumbnail="@mipmap/ic_launcher"
    android:description="@string/gif_description"
    />

4、配置strings.xml

<string name="gif_description">gif动态壁纸</string>

5、配置权限

<uses-permission android:name="android.permission.SET_WALLPAPER" />

6、启动GifService

Intent intent = new Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,new ComponentName(context, GIfWallPaperService.class));
startActivity(intent);

这样就可以实现gif动画加载了

Android 设置gif动态桌面相关推荐

  1. android机器人酷炫壁纸,完美酷炫体验 A60动态桌面小应用实测

    一直以来,HTC Sense的绚丽界面让不少用户感觉到美观实用,便有不少高手开始逐步仿制提出.很高兴的是,笔者用A60进行测试,该应用效果实现非常完美,推荐给广大的A60用户. 美化桌面工具包含2个: ...

  2. 120帧手机动态壁纸_Win10电脑也能用动态桌面了?没错,设置方法还很简单

    平时我们在使用手机时我们都知道,手机的桌面壁纸和锁屏壁纸都是可以设置为动态壁纸的.而对于平时所使用的电脑来说,电脑的壁纸就更为枯燥一些,只能使用静态的图片来作为电脑的桌面,很无聊很枯燥的. 但是,如果 ...

  3. win10动态壁纸怎么设置_想把我的女朋友设置为动态壁纸:看过来,教你啊

    动态壁纸,最近已经越来越受用户的欢迎.炫酷的桌面效果非常动人,让人蠢蠢欲动,但有非常多的网友都不会设置win10动态桌面.所以今天小编就把设置win10动态桌面的方法告诉大家,下面就是设置win10动 ...

  4. DreamSceneSeven打造炫酷的动态桌面

    动态桌面配置图文教程 --------------------------------------------Start Now------------------------------------ ...

  5. Android动态桌面,设置壁纸篇

    最近要做一个动态桌面.就看了下动态桌面有关的东西. 1,通过WallpaperManager设置静态壁纸 1.1先通过以下方法获取到WallpaperManager 1.2这个WallpaperMan ...

  6. live2d动态壁纸android,live2dviewerex宅男自定义动态壁纸下载-live2dviewerex动态桌面2.0.4 官方安卓版下载_东坡手机下载...

    live2dviewerex动态桌面是一款非常有趣的手机动态壁纸,只需要QQ便能登录,在登录界面可以看到相关信息.首次进入APP有针对APP的详细帮助说明,请首次使用的用户认真阅读,上面会解决你的大多 ...

  7. Android4.0 默认静、动态桌面设置

    默认静态: (1) mkdir -p overlay\frameworks\base\core\res\res\drawable-xlarge-nodpi (2)并放置default_wallpape ...

  8. win10动态壁纸怎么设置_电脑怎么设置动态桌面

    大多数电脑朋友的电脑桌面都是一张静态的图片壁纸,而很多朋友肯定不知道,桌面壁纸其实还可以是动态的,甚至是可以带有声音的动态视频,那么电脑怎么设置动态桌面?下面将会详解. 电脑怎么设置动态桌面 步骤1. ...

  9. win7 html 设置成桌面,教你怎样设置专属自己的windows7动态桌面

    很多人都喜欢动态的桌面,但是动态桌面难免会有人不会设置,windows7动态桌面设置其实不难的,下面windows7之家小编就教大家win7动态桌面怎么设置. win7系统个性化教程分享: 1. 动态 ...

  10. win10动态壁纸怎么设置_教程:iPhone/Android设置动态壁纸

     提示:点击"软曼网"↑免费订阅本公众号 昨天分享了一篇文章<干啥?想偷看手机?滚!>,很多网友留言不知道如何下载和设置.今天就在分享一下下载和设置方法.用动态Gif图 ...

最新文章

  1. MySQL 重要函数实例
  2. 分区报无效的参数_西门子70系列变频器55KW上电就报F002故障维修
  3. HTML 样式兼容不同设备类型
  4. vscode较详细注释的汇编语言hello world 输出程序,第一个汇编程序
  5. 安装JDK-- Java基础
  6. iUAP云运维平台v3.0全面支持基于K8s的微服务架构
  7. python3 csv读写_在python3中读取、更新和写入更新的CSV文件
  8. php最大并发数,php内置开发服务器的最大并发连接数
  9. python读取文件夹下所有文件的名字_一键汇总同一文件夹下所有表格,三种小技巧分享给你...
  10. 面向对象 —— 对类(class)的理解
  11. poj 匈牙利二分匹配算法2239 Selecting Courses
  12. 中医电脑cac处方系统 v1.3.3.8 免费
  13. 利用mybatis插件开发动态更改sql
  14. 程序员为了讨好大舅子,竟自学自动化编程
  15. C语言中表示温度符号,摄氏度符号怎么打(SCI论文中摄氏度°C符号的正确输法)...
  16. 手把手教你搭建一个你自己的语音合成系统
  17. 判断一个数n能否同时被3和5整除。
  18. 三、Eureka注册与发现之Eureka Comsumer
  19. 前端工程师简历怎么写才更容易进入面试呢?
  20. Hadoop的基本特点

热门文章

  1. 第一行代码android网课,使用Mongodb实现打卡签到系统的实例代码
  2. 博客做外链(可以发布外链的博客有哪些平台)
  3. 2022年考 PMP 证书有什么意义?
  4. 收官之战,年终的财务分析如何做?
  5. VMware连接不上网络解决办法
  6. 客户端到服务器端的通信过程及原理
  7. VC实现:bmp转jpg、jpg转bmp、截屏保存jpg
  8. Adobe Camera Raw v15.0.0.1264 增效工具
  9. 面对台风“烟花”,旅行延误会如何赔付?
  10. elasticSearch核心概念的介绍(七):常见的数据类型