我正在写一个动态壁纸,我使用的功能:
public void onOffsetsChanged(float xOffset, float yOffset,
float xOffsetStep, float yOffsetStep, int xPixelOffset,
int yPixelOffset)
要查看使用情况何时滑动到另一个屏幕,我使用xPixelOffset查看屏幕移动了多少像素,但它不会返回我期望的像素数。
对于桌面的5个屏幕中的每个屏幕,它显示像素偏移为0,-80,-160,-240,-320但是我希望它每次都会被屏幕的宽度偏移(240px而不是80px)
我错过了什么吗?
答案 0 :(得分:7)
您会注意到,当您滚动时,主屏幕的前景(图标,小部件等)向全屏宽度向左或向右移动,但背景图像(或动态壁纸)仅移动宽度的一小部分。显而易见的结果是视差滚动效果。
换句话说,你的5个屏幕端到端总共1200px(5 x屏幕宽度),但同一显示器上壁纸的最大宽度类似于480px(2 x屏幕宽度),因为背部不会像前面那样滚动。
然后,偏移量不应用于衡量显示器前景移动的距离,而是用于移动背景的距离。
因此,您仍然可以从offsets参数获取所需的信息。只是你对这些信息的解释必须改变一点。
答案 1 :(得分:2)
让你绘制的画布/位图是整个虚拟墙纸的大小(应该有尺寸screenWidth * 2,screenHeight),然后使用xPixelOffset作为x坐标将其绘制到surfaceHolder画布。这是简单的方法。
当然,没有法律规定您的虚拟墙纸需要这些尺寸。如果您愿意,它可以按照图标的速度滚动。那时你想要使用xOffset值来计算你自己的像素偏移量。
答案 2 :(得分:0)
if(xPixelOffset != 0){
myXPixelOffset = xPixelOffset*((backgroundWidth - screenwidth)/screenwidth);
}
backgroundWidth应该是screenHeight * 2