2010-07-07 5 views
5

나는 라이브 배경 화면을 쓰고 있어요 내가 기능 사용 오프셋 반환하지 않는 것 onOffsetsChanged : 용도가 다른 화면을 가로 질러 스 와이프하면안드로이드 라이브 벽지 xPixelOffset 실제 픽셀이

public void onOffsetsChanged(float xOffset, float yOffset, 
      float xOffsetStep, float yOffsetStep, int xPixelOffset, 
      int yPixelOffset) 

보고를, 그리고 xPixelOffset을 사용하여 화면이 픽셀 단위로 이동 한 정도를 알 수 있지만 예상되는 픽셀 수는 반환하지 않습니다.

바탕 화면의 각각에 대해 0, -80, -160, -240, -320이되도록 픽셀 오프셋을 보여 주지만, 매번 화면 너비에 의해 상쇄 될 것으로 예상됩니다 (240px 대신 80px)

내가 뭔가를 잃어버린거야?

답변

7

스크롤하면 홈 화면의 전경 (아이콘, 위젯 등)이 전체 화면 너비만큼 왼쪽 또는 오른쪽으로 이동하지만 배경 이미지 (또는 라이브 배경 화면)는 움직입니다 그 너비의 분율로 명백한 결과는 시차 스크롤 효과입니다.

5 가지 화면은 1200px (5x 화면 너비)와 같은 것이지만 동일한 디스플레이의 배경 화면 최대 너비는 480px (2x 화면 너비)와 비슷합니다. 왜냐하면 뒤가 정면만큼 스크롤하지 않기 때문입니다.

오프셋은 디스플레이의 전경이 얼마나 멀리 이동했는지 측정하지만 배경이 얼마나 멀리 이동했는지 측정하는 데 사용해서는 안됩니다.

따라서 offset 매개 변수에서 필요한 정보를 얻고 있습니다. 그 정보에 대한 당신의 해석이 조금 바뀌어야한다는 것입니다.

+0

네,하지만 내가 기본적으로 배경 화면은 정적이기 때문에이 발생이 paralax 효과를 만들 필요가 살아있는 벽지를 쓰고있다. 따라서 사용자가 이동 한 화면의 수와 라이브 화면을 사용하는 홈 화면이나 응용 프로그램에 따라 달라질 수있는 최대 화면 수를 알아야합니다. – stealthcopter

+1

유용한 정보 float xOffset은 최대화에 도달했을 때 알 수 있도록 정규화 단위 (0.0 - 1.0)로 오프셋을 반환합니다. – stealthcopter

2

여러분이 그린 가상 배경 화면의 전체 크기 (screenWidth * 2, screenHeight의 크기를 가져야 함)로 그린 캔버스/비트 맵을 가지고 xPixelOffset을 x 좌표로 사용하여 surfaceHolder 캔버스에 그립니다. 그것이 쉬운 방법입니다.

물론 가상 벽지에 이러한 치수가 필요하다는 법은 없습니다. 원하는 경우 아이콘의 속도로 스크롤 할 수 있습니다. 그 때 xOffset 값을 사용하여 자신의 픽셀 오프셋을 계산할 수 있습니다.

0
  if(xPixelOffset != 0){ 
       myXPixelOffset = xPixelOffset*((backgroundWidth - screenwidth)/screenwidth); 
      } 

backgroundWidth는 벌한다 screenHeight * 2

관련 문제