android动态壁纸视差滚动效果

时间:2013-04-10 11:54:48

标签: java android android-canvas live-wallpaper animationdrawable

当我们滚动时,主屏幕的前景(图标,小部件等)向左或向右移动全屏宽度,但背景图像(或动态壁纸)仅移动该宽度的一小部分。 我的问题是如何得到这种效果。 到现在为止已经做到了。

    SurfaceHolder holder = getSurfaceHolder();
        Canvas canvas = null;
        try {
            canvas = holder.lockCanvas();
            if (canvas != null) {

                drawCircles(canvas);
            }
        } finally {
            if (canvas != null)
                holder.unlockCanvasAndPost(canvas);
        }

绘制功能是

{
    private void draw(Canvas canvas) {
        Paint paint = new Paint();
        DisplayMetrics metdisplayMatrics = new DisplayMetrics();
        Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
        display.getMetrics(metdisplayMatrics);

            canvas.save();
            canvas.drawColor(0xff000000);
            mRecscreenRectangleFrame = new Rect(0, 0,  (int) (metdisplayMatrics.widthPixels*2.0), metdisplayMatrics.heightPixels);
            photo1= BitmapFactory.decodeResource(getResources(), R.drawable.img1);
            canvas.drawBitmap(photo1, null,mRecscreenRectangleFrame, paint);
            photo1.recycle();
            System.gc();
}               

现在如何把动态壁纸视差滚动效果。

    @Override
    public void onOffsetsChanged(float xOffset, float yOffset,
            float xOffsetStep, float yOffsetStep, int xPixelOffset,
            int yPixelOffset) {

        super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep,
                xPixelOffset, yPixelOffset);

        WallpaperManager myWallpaperManager = WallpaperManager.getInstance(getApplicationContext());
        View view=new View(getBaseContext());

        myWallpaperManager.setWallpaperOffsets(view.getWindowToken(),xOffset, 0f);

    }

尚未使用.................

1 个答案:

答案 0 :(得分:2)

致电WallpaperManager.setWallpaperOffsets以指示壁纸滚动。

Documentation

所以这应该以壁纸为中心:

WallpaperManager.setWallpaperOffsets(getWindowToken(), 0.5f, 0f);

这应该滚动到一边:

WallpaperManager.setWallpaperOffsets(getWindowToken(), 0f, 0f);

这应该滚动到另一边:

WallpaperManager.setWallpaperOffsets(getWindowToken(), 1f, 0f);

如果你要这样做,你应该确保你知道壁纸实际上可以滚动,或者用户要求你启用滚动。许多设备都配置了与屏幕大小相同但不会滚动的壁纸。