Kindle Fire在某些时候更改屏幕分辨率...
免责声明:这是一个奇怪的问题,只发生在Kindle Fire(到目前为止)。Kindle Fire在某些时候更改屏幕分辨率...
涉及的技术:Android SDK,Eclipse,LibGDX。
我有一个相对简单的应用程序运行LibGDX。 LibGDX的工作方式是让OpenGL线程尽可能多地调用Create()(一次)和Render()(这样你就可以完成渲染了)。所以当你初始化设备时,你的“Create()”方法被调用,然后当OpenGL表面被初始化时(所有这些都是自动发生的),你的Render()开始被调用。
如果OpenGL上下文丢失,被销毁等,您的Resize(width,height)方法由LibGDX调用。
到目前为止。太好了。
现在我遇到了Kindle Fire的一个奇怪问题,那里的东西看起来几个像素关闭或“切割”。 Kindle Fire在屏幕底部有一个“软条”(20像素),您无法隐藏或跳过,因为该设备没有物理按钮,所以这是“确定的”。预计你会触摸这个软吧,并得到一个更大的酒吧回去,回家等。根据亚马逊,这个酒吧不能被删除。 (并非100%清楚,但没有人找到方法 - 这不会违反亚马逊规则)。我见过的唯一一个删除的应用是亚马逊视频播放器,仅用于从亚马逊云端流式传输的视频。所以你可以看到,似乎没有办法“永久”隐藏该栏。
因此,如果酒吧在那里,您的真实屏幕状态不是硬件分辨率1024x600(横向),而是1024x580。所以我加了一些日志记录,以我的方法,看看发生了什么事情,以及与此感到吃惊......(记得创建(),渲染()和调整()方法):
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模糊)。注意最上面一栏是多么的不存在...
在这两个镜头的仔细检查,你可以说底部(这应该是一样的),是不是。 kindle正在做奇怪的事情。
任何想法?
这些资产最初被打包为1024x600,但我们已经改变了(现在580),并假设视口现在是1024x580,但我想知道是否有人找到更好的方法来处理这个废话?:)
note:我们在清单中有android:theme =“@ android:style/Theme.NoTitleBar.Fullscreen”。什么都不做。
在此先感谢。
的Kindle Fire有一个奇怪的行为,一旦应用程序加载好像它 “动作” 屏幕为20px了(Softbar高度),因此您的应用程序的外观几个像素关闭或切断。这是因为当你创建你的GLSurfaceView并设置你的renderer它调用两次onSurfaceChanged方法。
第一次,onSurfaceCreated被调用后,用1024×600的分辨率值,并且第一呼叫之后的第二时间与1024x580的值onDrawFrame。
的解决方案,你必须控制两个调用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()
}
}
我会看看这个,谢谢。当我设法做到这一点时,我会让你知道。 – 2012-02-10 15:19:22
我希望它可以帮助你,我使用该代码来管理我的项目中的这个问题:) – gergonzalez 2012-02-11 08:08:46
尝试使用这样的:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
来源:https://developer.amazon.com/help/faq.html?ref_=pe_132830_21362890#KindleFire
我最近跑到这个问题,想知道你是否已经找到了解决方案。
出现黑条,因为您的应用报告高度为580像素高。 OpenGL有一个坐标系,其中(0,0)位于屏幕的左下角。
出于某种原因,Kindle的软栏没有了20个像素移动EGLSurface。然而,调整大小会减小20px,留下黑色条。所以问题是EGLSurface的位置。而且有时候,由于时间安排,调整大小后会发生重定位(使黑色条消失)。
解决方案是使用上面的解决方案:http://*.com/a/9225218/2684 – 2012-07-11 09:51:47
我无法帮助Kindle问题本身,但resize()方法可能会在任何时间点被调用,并且与上下文丢失无关。上下文丢失通过对resume()的调用来指示。 – badlogic 2012-01-03 09:38:11
@badlogic嗨马里奥;)(格里佐尔在这里)。是的,我们正在等待resize(),但这似乎是Kindle Fire问题(由其他人报告)。亚马逊在那里做了一些令人讨厌的东西......:S感谢你' – 2012-01-04 14:30:49