Mar*_*ini 5 android libgdx kindle-fire
免责声明:这是一个奇怪的问题,只发生在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
Run Code Online (Sandbox Code Playgroud)
所以屏幕已被Kindle Fire"调整大小","在某些时候".
有没有人遇到这样的事情?
这是一个截图(注意顶部的黑条,这不是我添加的!).请原谅我模糊图像,但这是客户的项目,我不能"透露"任何东西.

有趣的部分开始有时,酒吧不会在那里,应用程序将看起来像下一个(再次,模糊的sry).请注意顶部栏不在那里......

仔细检查两个镜头后,您可以判断底部(应该是相同的)不是.那种有点奇怪的事情.
有任何想法吗?
资产最初打包为1024x600,但我们已经改变了(现在是580)并且假设视口现在是1024x580但是我想知道是否有人找到了更好的方法来处理这个废话?:)
注意:我们在清单中有android:theme ="@ android:style/Theme.NoTitleBar.Fullscreen".什么都不做.
提前致谢.
Kindle fire有一个奇怪的行为,一旦应用程序加载似乎它"移动"屏幕20px向上(软键高度)因此你的应用程序看起来几个像素关闭或削减.那是因为当您创建GLSurfaceView并设置渲染器时,它会调用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()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3649 次 |
| 最近记录: |