视差动态壁纸滚动太远



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

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

然后,我通过将height除以图像的高度来缩放图像。 在本例中,图像为 1000x563。 这可确保图像适合用户的高度维度,并且有足够的宽度用于视差滚动。

这在大多数手机上都可以正常工作,但由于某种原因,在某些LG手机上,图片滚动得太远。 例如,在分辨率为 1920x1080、有四个主屏幕的 LG G2 上,到第三个主屏幕(从左侧滑动时(,右侧 10% 左右的图像开始闪烁,整个第四个主屏幕也显示闪烁失真。

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

我已经将 Log 语句添加到 onOffsetsChanged 方法中,以下是我为 xOffset 和 xPixelsOffset 得到的:

屏幕 1:x像素偏移量:0.0x偏移量:0.0

屏幕 2:x像素偏移量:-360.0x偏移量:0.3334

屏幕 3:x像素偏移量:-720.0x偏移量:0.6667

屏幕 4:x像素偏移量:-1080.0x偏移量:1.0

我已经在我的Note 3上尝试了相同的代码,一切正常。 该手机具有与LG G2相同的分辨率(尽管屏幕更大((除了高度略大(1920年与1776年(,因为G2底部有一个菜单栏,远离可用的主屏幕(。

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

谢谢。

在弄乱了一段时间之后,我仍然不明白为什么会发生这种情况,但我找到了解决方法。 我没有在draw()方法中使用xPixelOffset,而是使用自定义变量,mmPixel计算公式为:

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

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

这也解决了我之前没有提到的另一个问题,但是某些启动器(由于某种原因(无法将图像移动到应有的位置。 例如,使用Nova Launcher,使用xPixelOffset仅移动图像总共360像素。 我不知道为什么有些启动器会这样做,但是放弃xPixelOffset并根据屏幕的宽度和xOffset手动计算也可以解决这个问题。

相关内容

  • 没有找到相关文章

最新更新