2010-08-18 19 views
6

Estoy escribiendo un fondo de pantalla en vivo para android. Para probar mi código básico estaba trabajando dibujé un rectángulo en el cornor superior izquierda de la pantalla:Android - recorte de fondo de pantalla en vivo

canvas.drawRect(0f,0f,50f,50f,paint); 

mitad del rectángulo estaba debajo de la barra en la parte superior de la pantalla principal. alt text

Me trataron de tener en cuenta las compensaciones de píxeles usando:

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

... 

    canvas.drawRect(0f+xPixelOffset,0f+yPixelOffset,50f+xPixelOffset,50f+yPixelOffset 
    ,paint); 

Pero el rectángulo todavía se dibuja debajo de la barra. ¿Cómo puedo saber dónde termina la barra para poder dibujar debajo?

Saludos,

Pete

+0

posible duplicado de [Altura de la barra de estado?] (Http://stackoverflow.com/questions/3355367/height-of-statusbar) – ChrisF

Respuesta

9

Este SO respuesta parece proporcionar una manera de conseguir la altura de la barra de estado: Height of statusbar? Copié el código a continuación - originalmente respondida por Jorgesys.

Rect rectgle= new Rect(); 
Window window= getWindow(); 
window.getDecorView().getWindowVisibleDisplayFrame(rectgle); 
int StatusBarHeight= rectgle.top; 
int contentViewTop= 
    window.findViewById(Window.ID_ANDROID_CONTENT).getTop(); 
int TitleBarHeight= contentViewTop - StatusBarHeight; 

    Log.i("*** Jorgesys :: ", "StatusBar Height= " + StatusBarHeight + " , TitleBar Height = " + TitleBarHeight); 

Espero que ayude.

+3

Quizás he pasado por alto algo, pero no puedo averiguar cómo llamar a getWindow() desde Live Wallpaper. WallpaperService y WallpaperService.Engine no tienen un método getWindow(). Puede usar getWindow() fácilmente en una actividad, pero Live Wallpaper se basa en la clase de servicio. ¿Alguien puede explicar? –

+0

Agradable respuesta que tenemos la altura, ahora en algunos teléfonos/pestañas la barra de estado está debajo y en algunos está en la parte superior cómo sabemos la posición de la barra de estado –

+0

@RenjithKN debe hacer una nueva pregunta – gary

3

Ha comprobado si un puntero se coloca (Guess sus variables de compensación son cero)? Me gustaría dibujar debajo de la barra, también, porque hay algunas aplicaciones de pantalla de inicio que pueden difuminar la barra y usted tendrá un área en blanco.

también supongo que el desplazamiento se utiliza sólo se usa si se desliza a otras pantallas ...

+0

Acabo de comprobar y son ambos 0. Hay otra manera de obtener la altura de la barra de la pantalla de inicio? – Peter

+0

En una aplicación normal, puede obtener la diferencia entre el tamaño de la pantalla del dispositivo y el tamaño de la vista, para que pueda calcular la altura de cada barra. No sé si eso funciona para fondos de pantalla. – WarrenFaith

Cuestiones relacionadas