2010-08-18 5 views
6

Я пишу живые обои для Android. Для того, чтобы проверить мой основной код работал я нарисовал прямоугольник в верхнем левом Корнор экрана:Android - Live Wallpaper offset clipping

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

Половина прямоугольника была под полосой в верхней части главного экрана. alt text

Я попытался взять в смещения счетов пикселей с помощью:

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); 

Но прямоугольник все же нарисован под перекладиной. Как найти, где заканчивается бар, чтобы я мог рисовать ниже его?

Приветствия,

Пит

+0

Возможный дубликат [Высота статусной панели?] (Http://stackoverflow.com/questions/3355367/height-of-statusbar) – ChrisF

ответ

9

Этот SO ответ, кажется, обеспечивает способ получить высоту строки состояния: Height of statusbar? Я скопировано код ниже - первоначально ответил 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); 

Надеюсь, это поможет.

+3

Возможно, я что-то замалчивал, но я не могу узнать, как вызвать getWindow() из Live Wallpaper. WallpaperService и WallpaperService.Engine не имеют метода getWindow(). Вы можете легко использовать getWindow() в Activity, но Live Wallpaper основывается на классе Service. Может кто-нибудь объяснить? –

+0

Хороший ответ, мы получили высоту, теперь в некоторых базах состояния телефонов/вкладок ниже и в некоторых из них сверху, как мы знаем положение строки состояния –

+0

@RenjithKN, вы должны задать новый вопрос – gary

3

проверил ли вы, если смещение установлено (угадайте ваши переменные смещения равны нулю)? Я бы тоже рисовал под баром, потому что есть некоторые приложения для домашнего экрана, которые могут смешать планку, и вы будете иметь пустую область.

Я также предполагаю, что смещение используется только используется, если вы скользите на другие экраны ...

+0

Я только что проверил, и они оба 0. У нас есть другой способ получить высоту панель домашнего экрана? – Peter

+0

В обычном приложении вы можете получить разницу между размером экрана устройства и размером представления, чтобы вы могли рассчитать высоту каждого бара. Не знаю, работает ли это на обоях. – WarrenFaith

Смежные вопросы