免责声明:这是一个奇怪的问题,只发生在Kindle Fire中(到目前为止)。
涉及的技术:Android SDK,Eclipse,LibGDX。
我有一个运行LibGDX的相对简单的应用。 LibGDX的工作方式是使用OpenGL线程调用Create()(一次),然后尽可能多地调用Render()(这样你就可以进行渲染......)。
因此,当您初始化Device时,将调用“Create()”方法,然后在初始化OpenGL表面时(所有这些都自动发生),您的Render()开始被调用。
如果OpenGL上下文丢失,损坏等,则LibGDX会调用Resize(width,height)方法。
到目前为止。超好的。
现在我遇到了一个奇怪的问题,Kindle Fire的东西看起来有点像素或“切”。 Kindle Fire在屏幕底部有一个“软键”(20像素),你无法隐藏或跳过,这是“好的”,因为该设备没有物理按钮。你应该触摸这个软条,并获得一个更大的酒吧回去,回家等。根据亚马逊,这个酒吧无法删除。 (并非100%明确,但没有人找到方法 - 这没有违反亚马逊规则)。我见过的唯一的应用程序删除了亚马逊视频播放器,用于仅从亚马逊云端流式传输的视频。正如您所看到的,似乎没有办法“永久地”隐藏该栏。
因此,如果条形图存在,则您的实际屏幕状态不是硬件分辨率1024x600(横向),而是1024x580。所以我在我的方法中添加了一些日志来查看发生了什么,并对此感到惊讶......(记住create(),render()和resize()方法):
12-23 15:17:04.119: I/myapp(19921): SCREEN HEIGHT AT CREATE(): 600
[snip other unrelated log stuff]
12-23 15:17:04.673: I/myapp(19921): SCREEN HEIGHT AT RENDER() LOOP: 600
[snip other unrelated log stuff]
12-23 15:17:04.705: I/myapp(19921): MyApp - Resize() Called.
12-23 15:17:04.705: I/myapp(19921): SCREEN HEIGHT AT RENDER() LOOP: 580
所以屏幕已被Kindle Fire“调整大小”,“在某些时候”。
有没有人遇到这样的事情?
这是一个截图(注意顶部的黑条,这不是我添加的!)。请原谅我模糊图像,但这是客户的项目,我不能“透露”任何东西。
有趣的部分从有时开始,条形图将不在那里,应用程序将看起来像下一个(再次,模糊的sry)。请注意顶部栏不在那里......
仔细检查两个镜头,你可以知道底部(应该是相同的),不是。点燃的东西很奇怪。
有什么想法吗?
资产最初打包为1024x600,但我们已经改变了(现在是580),并且假设视口现在是1024x580,但我想知道是否有人找到了更好的方法来处理这个废话? :)
注意:我们在清单中有android:theme =“@ android:style / Theme.NoTitleBar.Fullscreen”。什么都不做。
提前致谢。
答案 0 :(得分:6)
Kindle fire有一种奇怪的行为,一旦应用程序加载似乎它“移动”屏幕20px向上(软键高度)因此你的应用程序看起来几个像素关闭或削减。这是因为当您创建GLSurfaceView并设置renderer时,它会调用两次onSurfaceChanged方法。
第一次调用onSurfaceCreated后,分辨率值为1024x600,第一次调用onDrawFrame后第二次,值为1024x580。
解决方案是,您必须控制对onSurfaceChanged的两次调用并调整opengl视口的大小。
private static boolean appStarted = false;
...
private static class Renderer implements GLSurfaceView.Renderer
{
public void onSurfaceChanged(GL10 gl, int width, int height)
{
if ( !appStarted )
{
//Initialization (Resolution 1024x600)
}
else
{
//Second call, screen resolution changed (Resolution 1024x580)
//Resize(width,height)
}
appStarted = true;
}
public void onDrawFrame(GL10 gl) {
//Render()
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
//Create()
}
}
答案 1 :(得分:1)
尝试使用:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
来源:https://developer.amazon.com/help/faq.html?ref_=pe_132830_21362890#KindleFire
答案 2 :(得分:0)
我最近遇到了这个问题,并想知道你是否已找到解决方案。
出现黑条,因为您的应用报告高度为580像素高。 OpenGL有一个坐标系,其中(0,0)位于屏幕的左下角。
出于某种原因,Kindle的软条没有将EGLSurface向上移动20个像素。然而,调整大小会使大小减小20px,留下黑条。所以问题是EGLSurface的位置。似乎有时候,由于时间安排,重新调整后会发生重新调整(使黑条消失)。