我正在尝试创建一个动画壁纸,动画始终位于当前主屏幕页面的中心,而不会丢失扩展背景。 我现在正在做的是绘制我的自定义背景位图,然后在其上绘制一些文字。
这是我的drawframe方法:
final SurfaceHolder holder = getSurfaceHolder();
Canvas canvas = null;
try {
canvas = holder.lockCanvas();
if (canvas != null) {
if(mBackgroundBitmap != null) {
canvas.drawBitmap(mBackgroundBitmap, 0, 0, null);
} else {
canvas.drawColor(Color.BLACK);
}
drawText(canvas);
}
}
finally {
if (canvas != null ) holder.unlockCanvasAndPost(canvas);
}
它确实有效,但是当我在主屏幕上更改页面时,我得到了一个固定的背景图像而不是像我使用大壁纸时那样不同的“部分”。
我还尝试在锁定画布之前设置壁纸,但它不能像预期的那样工作:
if(mBackgroundBitmap != null) {
try {
setWallpaper(mBackgroundBitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
final SurfaceHolder holder = getSurfaceHolder();
Canvas canvas = null;
try {
canvas = holder.lockCanvas();
if (canvas != null) {
drawText(canvas);
}
}
finally {
if (canvas != null ) holder.unlockCanvasAndPost(canvas);
}
在更改主屏幕页面时,我可以做些什么来保留大背景“移动”,但是在当前页面中添加一些动画?
答案 0 :(得分:3)
我已经找到了如何解决它!
void drawFrame() {
final SurfaceHolder holder = getSurfaceHolder();
Canvas canvas = null;
try {
canvas = holder.lockCanvas();
if (canvas != null) {
canvas.save();
canvas.translate((float) mxOffset, 0f);
if(mBackgroundBitmap != null) {
canvas.drawBitmap(mBackgroundBitmap, 0, 0, null);
}
canvas.restore();
}
}
finally {
if (canvas != null ) holder.unlockCanvasAndPost(canvas);
}
}
mBackgroundBitmap是我想要绘制为墙纸的位图,其宽度是屏幕宽度的两倍。
mxOffsets采用覆盖的onOffsetsChanged:
@Override
public void onOffsetsChanged(float xOffset, float yOffset,
float xOffsetStep, float yOffsetStep, int xPixelOffset,
int yPixelOffset) {
super.onOffsetsChanged(mxOffset, yOffset, xOffsetStep, yOffsetStep,
xPixelOffset, yPixelOffset);
mxOffset = xPixelOffset;
drawFrame();
}