gpt4 book ai didi

android - Kindle Fire 有时会改变屏幕分辨率……

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:28:18 24 4
gpt4 key购买 nike

免责声明:这是一个奇怪的问题,只发生在 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。所以我在我的方法中添加了一些日志记录以查看发生了什么,对此感到惊讶......(记住 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“在某个时候”“调整了大小”。

有人遇到过这样的事情吗?

这是一个屏幕截图(注意顶部的黑条,不是我添加的!)。请原谅我模糊了图像,但这是客户的项目,我不能“透露”任何东西。

enter image description here

有趣的部分开始于有时,该栏将不存在并且应用程序看起来像下一个(再次,抱歉模糊)。请注意顶部栏是如何不存在的……

enter image description here

仔细检查两个镜头后,您可以看出底部(应该是相同的)不是。 kindle 正在做奇怪的事情。

有什么想法吗?

Assets 最初打包为 1024x600,但我们已经更改(现在为 580)并假设视口(viewport)现在为 1024x580,但我想知道是否有人找到更好的方法来处理这种废话? :)

注意: list 中确实有 android:theme="@android:style/Theme.NoTitleBar.Fullscreen"。什么都不做。

提前致谢。

最佳答案

Kindle fire 有一个奇怪的行为,应用程序加载后似乎将屏幕“移动”了 20 像素(Softbar 高度),因此您的应用程序看起来关闭或剪切了几个像素。那是因为当你创建你的 GLSurfaceView并设置你的 renderer它两次调用 onSurfaceChanged方法。

第一次调用 onSurfaceCreated 后,分辨率值为 1024x600,第二次调用 onDrawFrame 后分辨率值为 1024x580。

解决方案,必须控制对 onSurfaceChanged 的​​两次调用并调整 opengl 视口(viewport)的大小。

    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()
}
}

关于android - Kindle Fire 有时会改变屏幕分辨率……,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8617402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com