我不需要隨手機移動的花式牆紙,我只想使用GIF作爲移動的「現場」壁紙。這是可能的,如果有的話,任何人都可以向我解釋它是如何完成的,或者將我指向一個資源來演示如何?我一直無法找到一個。如何將GIF變成動態壁紙以便在Android應用中使用
3
A
回答
5
見GIFLiveWallpaper演示看着外面的GitHub庫
public class GifLiveWallPaper extends WallpaperService {
static final String TAG = "LIVE_WALLPAPER";
static final Handler liveHandler = new Handler();
@Override
public Engine onCreateEngine() {
try {
return new WallPaperEngine();
} catch (IOException e) {
Log.w(TAG, "Error creating WallPaperEngine", e);
stopSelf();
return null;
}
}
class WallPaperEngine extends Engine {
private Movie liveMovie;
private int duration;
private Runnable runnable;
float mScaleX;
float mScaleY;
int mWhen;
long mStart;
public WallPaperEngine() throws IOException {
InputStream is = getResources().openRawResource(R.raw.sam);
if (is != null) {
try {
liveMovie = Movie.decodeStream(is);
duration = liveMovie.duration();
} finally {
is.close();
}
} else {
throw new IOException("Unable to open R.raw.hand");
}
mWhen = -1;
runnable = new Runnable() {
public void run() {
nyan();
}
};
}
@Override
public void onDestroy() {
super.onDestroy();
liveHandler.removeCallbacks(runnable);
}
@Override
public void onVisibilityChanged(boolean visible) {
super.onVisibilityChanged(visible);
if (visible) {
nyan();
} else {
liveHandler.removeCallbacks(runnable);
}
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
super.onSurfaceChanged(holder, format, width, height);
mScaleX = width/(1f * liveMovie.width());
mScaleY = height/(1f * liveMovie.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) {
drawGif(canvas);
}
} finally {
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
liveHandler.removeCallbacks(runnable);
if (isVisible()) {
liveHandler.postDelayed(runnable, 1000L/25L);
}
}
void tick() {
if (mWhen == -1L) {
mWhen = 0;
mStart = SystemClock.uptimeMillis();
} else {
long mDiff = SystemClock.uptimeMillis() - mStart;
mWhen = (int) (mDiff % duration);
}
}
void drawGif(Canvas canvas) {
canvas.save();
canvas.scale(mScaleX, mScaleY);
liveMovie.setTime(mWhen);
liveMovie.draw(canvas, 0, 0);
canvas.restore();
}
}
}
相關問題
- 1. 在Android動態壁紙使用.gif文件
- 2. 如何在android中創建動態壁紙應用程序?
- 3. Android動態壁紙
- 4. Android動態壁紙
- 5. Android動態壁紙
- 6. 動態壁紙Android?
- 7. 如何在動態壁紙中居中放映GIF
- 8. 如何將AirPlay集成到android動態壁紙中?
- 9. 如何從動態壁紙使用ACRA?
- 10. Android動態壁紙動畫
- 11. 如何在android中保存動態生成的壁紙
- 12. 如何將動態壁紙設置爲默認壁紙?
- 13. 如何爲android創建動態壁紙
- 14. android動態壁紙:如何摧毀adview?
- 15. 視頻動態壁紙android
- 16. Android動態壁紙問題
- 17. Android動態壁紙指導
- 18. Android動態壁紙背景
- 19. Android動態壁紙:waitForCondition(ReallocateCondition)
- 20. Android - 動態壁紙OPENGL
- 21. 動態壁紙爲Android xml
- 22. android的動態壁紙
- 23. Android:恢復動態壁紙
- 24. Cocos2dx Android動態壁紙
- 25. Android動態壁紙onOffsetsChanged
- 26. 在android中使用OpenGL在動態壁紙上繪製紋理
- 27. 禁用動態壁紙
- 28. 使用當前壁紙的動態壁紙背景
- 29. 無法應用動態壁紙
- 30. Android動態壁紙崩潰在配置壁紙
如果你有幫助,從我的回答不是不接受的答案,以便其他可以從你的貢獻:) – AndruBoy