使用视差滚动制作Android动态壁纸

时间:2012-10-20 08:38:23

标签: android

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

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();
}   

3 个答案:

答案 0 :(得分:4)

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

canvas.translate(-dx, 0);

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

答案 1 :(得分:1)

此处的算法需要更改:

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

应改为类似于:

dx = (width) * (xOffset);

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

canvas.drawBitmap(bg, xPixels, 0, null);

答案 2 :(得分:0)

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

其中:

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