Android 設定gif動態桌面
阿新 • • 發佈:2019-01-24
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 intgifWidth; 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動畫載入了