Android - 动态壁纸偏移裁剪

6

我正在为安卓编写一个动态壁纸。为了测试我的基础代码是否工作正常,我在屏幕的左上角绘制了一个矩形:

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

但是矩形仍然被绘制在条形图下方。我该如何找到条形图的结束位置,以便在其下方绘制内容?
谢谢,
皮特

可能是重复的问题:状态栏的高度? - ChrisF
2个回答

9

这个SO答案似乎提供了一种获取状态栏高度的方法: 状态栏的高度? 我复制了下面的代码-原始答案由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); 

希望这能有所帮助。

4
也许我忽略了一些东西,但我找不到如何从动态壁纸中调用 getWindow() 方法。WallpaperService 和 WallpaperService.Engine 没有实现 getWindow() 方法。在 Activity 中可以轻松使用 getWindow() 方法,但是动态壁纸是基于 Service 类的。有人能解释一下吗? - developer_7
我们得到了一个很好的答案,现在在一些手机/平板电脑上状态栏在下方,在一些手机/平板电脑上则在顶部,我们如何知道状态栏的位置? - Renjith K N
@RenjithKN,您应该提出一个新问题。 - gary

3

您是否检查过是否设置了偏移量(猜测您的偏移变量为零)?我也会在栏下绘制,因为有一些主屏幕应用程序可以混合出栏,然后您将拥有一个空白区域。

我还猜测您使用的偏移量仅在滑动到其他屏幕时使用...


我刚刚检查了一下,它们都是0。有没有其他方法可以获取主屏幕栏的高度? - user130076
在普通应用程序中,您可以获取设备屏幕大小和视图大小之间的差异,因此可以计算每个栏的高度。不知道这是否适用于壁纸。 - WarrenFaith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接