我正在尝试调整Google的CubeLiveWallpaper演示,以在动态壁纸中创建视差效果。我已经删除了立方体并显示了我自己的图像,这很棒,但我已经碰壁了。
我的理解是我应该能够使用onOffsetsChanged()中的xPixels来确定在画布上绘制位图的位置。假设我还没有说疯狂,逻辑将规定每次用户刷卡时xPixels必须是不同的值。我已经用日志声明证明这不会发生。事实上,onOffsetsChanged()收到的值都没有变化。结果是我的图像没有移动。
首先,我将提供日志输出,然后是代码。
日志(从Dalvik Debug Monitor复制)。在任一方向上的每次滑动都会产生此输出。
02-23 20:09:29.859: D/onOffsetsChanged(1039): xOffset (0.500000) | yOffset (0.000000) | xStep (0.000000) | yStep (0.000000) | xPixels (-160) | yPixels (0)
onOffsetsChanged
public void onOffsetsChanged( float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels )
{
Log.d( "onOffsetsChanged", String.format("xOffset (%f) | yOffset (%f) | xStep (%f) | yStep (%f) | xPixels (%d) | yPixels (%d)",
xOffset,
yOffset,
xStep,
yStep,
xPixels,
yPixels) );
mOffset = xPixels; // mOffset is a member of my class
drawFrame();
}
我认为包含下面的代码是不必要的,因为绘图操作是在onOffsetsChanged中分配mOffset之后,但看到我是如何在这里寻求帮助的人,我已经失去了承担事情的所有权利。 / p>
并条机()
void drawFrame()
{
final SurfaceHolder holder = getSurfaceHolder();
Canvas c = null;
try
{
c = holder.lockCanvas();
if( c != null )
{
drawBackdrop( c );
}
}
finally
{
if( c != null )
{
holder.unlockCanvasAndPost( c );
}
}
mHandler.removeCallbacks( drawFrameRunnable );
if( mVisible )
{
mHandler.postDelayed( drawFrameRunnable, 1000 / 25 );
}
}
drawBackdrop()
void drawBackdrop( Canvas c )
{
c.save();
c.drawColor( Color.BLACK );
c.drawBitmap( backdropBmp,
mOffset,
0,
null );
c.restore();
}
作为最后一点,我会提到据我所知,我的手机支持滚动壁纸。据我所知,Galaxy S3没有(来源:http://androidforums.com/samsung-galaxy-s3/586033-galaxy-s3-cheated-some-us-leaving-out-scrolling-wallpapers.html)。我已经从Play商店下载了几张动态壁纸,他们都成功滚动了。我认为那些开发人员没有以某种方式跳过一堆箍来破解我的设备的相同功能。我正在使用Samsung Transform Ultra。
感谢您的帮助!