可以在Android中将animationgif文件设置为动态壁纸吗?

我是Android平台的新手。 我想开发一个动态壁纸应用程序。 当我在搜索引擎中对此进行搜索时,他们中的许多人创建了一个动态壁纸作为他们的代码(使用SurfaceViewCanvas ,我对此并不十分了解。 我怀疑的是,任何可能将.gif图像设置为动态壁纸

  • 更改Android中布局的背景颜色
  • NDK中的内存分配多少钱?
  • 将Google Play中的Android应用转换为三星商店
  • 在Android Native浏览器中上传的空文件
  • Google MapFragment为空白(白色),找不到类'maps.jk'
  • NDK API参考文档?
  • 减少Android Studio项目大小
  • Android Studio:缺少添加为库选项
  • 这是基本的壁纸服务(在动态壁纸教程中提供)被黑客攻击以显示animationgif。

    首先 – 创建一个项目并将您的清单设置为动态壁纸。
    然后 – 下载一个像这样的gif
    nyan nyan

    将gif保存在项目中的res/raw/nyan.gif中。
    创建一个动态壁纸服务,如本例所示。

     public class NyanNyanService extends WallpaperService { static final String TAG = "NYAN"; static final Handler mNyanHandler = new Handler(); /** * @see android.service.wallpaper.WallpaperService#onCreate() */ @Override public void onCreate() { super.onCreate(); } /** * @see android.service.wallpaper.WallpaperService#onCreateEngine() */ @Override public Engine onCreateEngine() { try { return new NyanEngine(); } catch (IOException e) { Log.w(TAG, "Error creating NyanEngine", e); stopSelf(); return null; } } class NyanEngine extends Engine { private final Movie mNyan; private final int mNyanDuration; private final Runnable mNyanNyan; float mScaleX; float mScaleY; int mWhen; long mStart; NyanEngine() throws IOException { InputStream is = getResources().openRawResource(R.raw.nyan); if (is != null) { try { mNyan = Movie.decodeStream(is); mNyanDuration = mNyan.duration(); } finally { is.close(); } } else { throw new IOException("Unable to open R.raw.nyan"); } mWhen = -1; mNyanNyan = new Runnable() { public void run() { nyan(); } }; } @Override public void onDestroy() { super.onDestroy(); mNyanHandler.removeCallbacks(mNyanNyan); } @Override public void onVisibilityChanged(boolean visible) { super.onVisibilityChanged(visible); if (visible) { nyan(); } else { mNyanHandler.removeCallbacks(mNyanNyan); } } @Override public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) { super.onSurfaceChanged(holder, format, width, height); mScaleX = width / (1f * mNyan.width()); mScaleY = height / (1f * mNyan.height()); nyan(); } @Override public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) { super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixelOffset, yPixelOffset); nyan(); } void nyan() { tick(); SurfaceHolder surfaceHolder = getSurfaceHolder(); Canvas canvas = null; try { canvas = surfaceHolder.lockCanvas(); if (canvas != null) { nyanNyan(canvas); } } finally { if (canvas != null) { surfaceHolder.unlockCanvasAndPost(canvas); } } mNyanHandler.removeCallbacks(mNyanNyan); if (isVisible()) { mNyanHandler.postDelayed(mNyanNyan, 1000L/25L); } } void tick() { if (mWhen == -1L) { mWhen = 0; mStart = SystemClock.uptimeMillis(); } else { long mDiff = SystemClock.uptimeMillis() - mStart; mWhen = (int) (mDiff % mNyanDuration); } } void nyanNyan(Canvas canvas) { canvas.save(); canvas.scale(mScaleX, mScaleY); mNyan.setTime(mWhen); mNyan.draw(canvas, 0, 0); canvas.restore(); } } } 

    这将基本上缩放nyan-nyan猫以适应屏幕并永久地制作它。

    动态壁纸清单看起来很像这样(此示例不包含配置活动):

     < ?xml version="1.0" encoding="utf-8"?>            

    AndroidManifest.xml引用了res/xml的文件,在本例中名为“nyan.xml”:

     < ?xml version="1.0" encoding="utf-8"?>