我设计了一个使用视差滚动的动态壁纸。为了将壁纸缩放到用户屏幕的大小,我使用:
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.
感谢。
答案 0 :(得分:1)
在讨论了一段时间之后,我仍然不明白为什么会这样,但我找到了解决方法。我使用的自定义变量xPixelOffset
不是在我的draw()
方法中使用mmPixel
,而是通过以下方式计算:{/ p>
mmPixel = (float) (((xOffset *.5) * screenWidth) * -1);
这基本上与使用xPixelOffset
相同,除了它在每次滑动时只移动了一半。我仍然不明白为什么我需要除以2,因为偏移是1080并且我的图像缩放得更大,但是如果其他人遇到这个问题,这应该可行。
这也解决了我之前没有提到的另一个问题,但是一些发射器(出于某种原因)无法尽可能地移动图像。例如,使用Nova Launcher,使用xPixelOffset
仅移动图像总共360像素。我不知道为什么有些发射器可以执行此操作,但放弃xPixelOffset
并根据屏幕的宽度手动计算它xOffset
也解决了这个问题。