视差动态壁纸滚动太远

时间:2015-10-26 01:01:30

标签: android parallax live-wallpaper wallpaper

我设计了一个使用视差滚动的动态壁纸。为了将壁纸缩放到用户屏幕的大小,我使用:

int height = getApplicationContext().getResources().getDisplayMetrics().heightPixels;

然后我通过将height除以图像的高度来缩放图像。在这种情况下,图像是1000x563。这确保了图像适合用户的高度尺寸并且视差滚动具有足够的宽度。

这在大多数手机上运行良好,但由于某些原因,在某些LG手机上,图片滚动太远了。例如,在LG G2上,分辨率为1920x1080,有四个主屏幕,在第三个主屏幕上(从左边滑动时),右边10%左右的图像开始闪烁,整个第四个主屏幕还显示闪烁的失真。

我无法弄清楚为什么会发生这种情况,因为我使用的缩放器应该给我足够的宽度来滚动。 height / 563 = 3.1545923。当缩放器,3.1545923乘以图像的宽度(1,000)时,我得到3,154。如果屏幕宽度是1080,我应该只需要两倍的视差滚动,这将是2,160。

我已经在onOffsetsChanged方法中添加了Log语句,这是我得到的xOffset和xPixelsOffset:

屏幕1: xPixelOffset:0.0 xOffset:0.0

屏幕2: xPixelOffset:-360.0 xOffset:0.3334

屏幕3: xPixelOffset:-720.0 xOffset:0.6667

屏幕4: xPixelOffset:-1080.0 xOffset:1.0

我在Note 3上尝试过相同的代码,一切正常。这款手机具有与LG G2相同的精确分辨率(虽然屏幕更大)(高度略大(1920对1776),因为G2的底部有一个菜单栏,可以从可用的主屏幕中取出)。

有什么想法吗?这几乎就好像LG手机上的视差滚动滚动得比它应该的更远,但它不应该因为上面的xPixelOffset值正确地从0到1080.

感谢。

1 个答案:

答案 0 :(得分:1)

在讨论了一段时间之后,我仍然不明白为什么会这样,但我找到了解决方法。我使用的自定义变量xPixelOffset不是在我的draw()方法中使用mmPixel,而是通过以下方式计算:{/ p>

mmPixel = (float) (((xOffset *.5) * screenWidth) * -1);

这基本上与使用xPixelOffset相同,除了它在每次滑动时只移动了一半。我仍然不明白为什么我需要除以2,因为偏移是1080并且我的图像缩放得更大,但是如果其他人遇到这个问题,这应该可行。

这也解决了我之前没有提到的另一个问题,但是一些发射器(出于某种原因)无法尽可能地移动图像。例如,使用Nova Launcher,使用xPixelOffset仅移动图像总共360像素。我不知道为什么有些发射器可以执行此操作,但放弃xPixelOffset并根据屏幕的宽度手动计算它xOffset也解决了这个问题。