6

我正在创建一个带有视差滚动的动态壁纸。我读过这篇文章:动态壁纸背景的视差效果滚动。但是当我更改桌面时,背景会以错误的方式移动(如果我从左到右更改桌面,图片会从右到左移动)。如何改变方向?代码片段:

public void Init(Bitmap bitmap){
  bg = new BitmapFactory().decodeResource(context.getResources(), R.drawable.thunder);
  bg = Bitmap.createScaledBitmap(bg, (int)(width*1.4), height, true);
}

float dx = 0.0f; 
@Override
    public void onOffsetsChanged(float xOffset, float yOffset,
            float xStep, float yStep, int xPixels, int yPixels) {
        dx = (width - bg.getWidth()) * (1 - xOffset);
    } 

private void doDraw(Canvas canvas) {
    canvas.save();
    canvas.translate(dx, 0);
    canvas.drawBitmap(bg, 0, 0, null);

    canvas.restore();
}   
4

3 回答 3

4

我知道这是一个老问题,但由于这在谷歌上是一个很高的结果,你需要做的就是翻转翻译上的标志。

canvas.translate(-dx, 0);

这将有效地反转用户滑动时背景滚动的方向。希望这对其他人有帮助。

于 2013-06-12T15:28:57.700 回答
1

这里的算法需要改一下:

dx = (width - bg.getWidth()) * (1 - xOffset);

应更改为类似于:

dx = (width) * (xOffset);

另一种方法是通过以下方式直接访问 canvas.drawBitmap() 方法:

canvas.drawBitmap(bg, xPixels, 0, null);
于 2012-10-20T08:48:21.957 回答
0

dx = (宽度- bg .getWidth()) * xOffset;

在哪里:

宽度- 画布宽度;
bg - 位图

于 2014-12-27T03:31:06.337 回答