如何在画布上进行3d旋转的过渡效果

时间:2014-02-13 22:23:53

标签: android android-canvas live-wallpaper

我有一系列图像,想要创建一个过渡效果作为LiveWallpaper动画的一部分 - 类似于Canvas上的3D旋转(没有OpenGL ES)。

代码段是:

case 15: {/* Vertical rotation left*/
        canvas.drawBitmap(mPreviousBitmap, 0, 0, myPaint);
        holder.unlockCanvasAndPost(canvas);
        Camera mCamera = new Camera();
        Matrix matrix = new Matrix();
        mCamera.save();
        for (int i = 0; i > -90;) {
                canvas = holder.lockCanvas();
                canvas.drawColor(Color.BLACK);
                mCamera.rotateY(-5);
                mCamera.getMatrix(matrix);
                //dss is Device Screen Size structure where the relevant parameters stored
                matrix.preTranslate(-dss.getWidth() / 2, -dss.getHeight() / 2);
                matrix.postTranslate(dss.getWidth() / 2, dss.getHeight() / 2);
                canvas.drawBitmap(mPreviousBitmap, matrix, myPaint);
                holder.unlockCanvasAndPost(canvas);
                i -= 5;
        }
        mCamera.rotateY(180);
        mCamera.getMatrix(matrix);
        for (int i = 0; i > -90;) {
                canvas = holder.lockCanvas();
                canvas.drawColor(Color.BLACK);
                mCamera.rotateY(-5);
                mCamera.getMatrix(matrix);
                matrix.preTranslate(-dss.getWidth() / 2, -dss.getHeight() / 2);
                matrix.postTranslate(dss.getWidth() / 2, dss.getHeight() / 2);
                canvas.drawBitmap(mBitmap, matrix, myPaint);
                holder.unlockCanvasAndPost(canvas);
                i -= 5;
        }
        mCamera.restore();
        mLastDrawTime = System.currentTimeMillis();
        break;
}

我用11种不同的设备测试了它

Asus Transformer TF700T, Samsung Galaxy S4 I9500, Samsung I9082, LG p715, HTC Desire SV T326e, Sony Xperia Z1 C6902, Huawei Ascend Y511-U30, HTC Sensation XL x315e, HTC Desire 300, Fly IQ431 and Motorola Moto G.

除了平板电脑Asus Transformer TF700T之外,此代码无处不在。我的平板电脑出现异常行为:在第一张图像关闭和下一张图像出现之间,我看到以下状态: http://i-fotki.info/16/842cc7c2d59483650edfd5de48c6a3464e1a97174989084.jpg.html

但是对于其他设备,我的图像会流畅地改变。

那么我的代码中有什么不正确以及我应该改变什么呢?

0 个答案:

没有答案