我有一系列图像,想要创建一个过渡效果作为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
但是对于其他设备,我的图像会流畅地改变。
那么我的代码中有什么不正确以及我应该改变什么呢?