android中自定义动态壁纸

发布时间:2019-06-24 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了android中自定义动态壁纸脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

android中我们一般设置静态壁纸,使用WallpaPErManager可以轻松达到目的,但是使用WallpaperManager是不能够设置动态壁纸的,为此android提供了一个WallpaperService专门用来设置动态壁纸,那么我们就用几个简单的步骤来说明一下如何简单的定义一个动态壁纸。

1.新建一个资文件wallpaper.XMl

首先在xML目录下面新建一个wallpaper.xml的资源描述文件.

<?xml version="1.0" encoding="utf-8"?>
<wallpaper >"http://schemas.andROId.COM/apk/res/android"
    android:description="@string/wallpaper_name"
    android:thumbnail="@mipmap/ic_launcher_round" />

这个xml的标签必须是wallpaper,description用于对当前壁纸的描述,可选。thumbnail用于表示当前壁纸的缩略图,一般在launcher或者设置中设置动态壁纸的时候会显示。

2.继承WallpaperService类
public class MyWallpaperService extends WallpaperService {

    @override
    public Engine onCreateEngine() {
        return new MyEngine();
    }


    PRivate class MyEngine extends Engine {

        @Override
        public void onCreate(SurfaceHolder surfaceHolder) {
            super.onCreate(surfaceHolder);
        }

        @Override
        public void onSurfaceCreated(SurfaceHolder holder) {
            super.onSurfaceCreated(holder);
            Canvas canvas = holder.lockCanvas();
            Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
            p.setstrokeWidth(@H_923_126@10);
            p.setColor(Color.BLUE);
            canvas.drawLine(0, 0, 100, 100, p);
            holder.unlockCanvasAndPost(canvas);

        }

        @Override
        public void onVisibilITyChanged(boolean visible) {
            super.onVisibilityChanged(visible);
        }

        @Override
        public void onSurfaceDestroyed(SurfaceHolder holder) {
            super.onSurfaceDestroyed(holder);
        }

        @Override
        public void onDestroy() {
            super.onDestroy();
        }
    }
}

WallpaperService这个类没有太多的接口功能供我们调用,最重要的方法是onCreateEngine,我们必须在这个方法中返回一个壁纸的引擎,我们所有的绘制任务都需要在这个引擎中完成。返回的Engine对象是WallpaperService的一个内部类,在这个方法中有大量的回调方法用来帮助我们完成我们的绘制逻辑,最重要的方法包括onSurfaceCreatedonVisibilityChangedonSurfaceDestroyed等,这些回调方法的功能还是很好理解的,在这里我们在壁纸层的surface创建之后绘制一个直线,无须赘述。

3.声明androidmanifest.xml

WallpaperService也是一个service,所以也需要在清单文件中声明,这里声明需要注意permission和meta-data的声明,格式比较固定,所以也不用多说了。

<?xml version="1.0" encoding="utf-8"?>
<manifest >"http://schemas.android.com/apk/res/android"
    package="com.coolspan.livewallpaper">

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

    <uses-feature android:name="android.Software.live_wallpaper" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".ui.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service
            android:name=".service.LiveWallpaperService"
            android:enabled="true"
            android:label="@string/wallpaper_name"
            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/my_wallpaper" />
        </service>
    </application>

</manifest>
4.启动

一般这样就可以在launcher或者设置中启动了,这里我们使用一个Activity来启动到设置的界面

  Intent localIntent = new Intent();
        localIntent.setAction(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);//android.service.wallpaper.CHANGE_LIVE_WALLPAPER
        localIntent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_component
                , new ComponentName(this.getApplicationContext().getPackageName()
                        , MyWallpaperService.class.getcanonicalName()));
        this.startActivity(localIntent);

设置完成之后,桌面就显示了~

android中自定义动态壁纸

脚本宝典总结

以上是脚本宝典为你收集整理的android中自定义动态壁纸全部内容,希望文章能够帮你解决android中自定义动态壁纸所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。