草庐IT

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

coder 2023-12-11 原文

免责声明:这是一个奇怪的问题,只发生在 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“在某个时候”“调整了大小”。

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

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

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

仔细检查两个镜头后,您可以看出底部(应该是相同的)不是。 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/

有关android - Kindle Fire 有时会改变屏幕分辨率……的更多相关文章

  1. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  2. [工业相机] 分辨率、精度和公差之间的关系 - 2

    📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年

  3. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  4. ruby - 改变替换的大小写 - 2

    我有以下内容:text.gsub(/(lower)(upper)/,'\1\2')我可以将\2替换为大写吗?类似于:sed-e's/\(abc\)/\U\1/'这在Ruby中可行吗? 最佳答案 查看gsub文档:str.gsub(模式){|匹配|block}→new_str在block形式中,当前匹配字符串作为参数传入,$1、$2、$`、$&、$'等变量将被适当设置。block返回的值将替换为每次调用的匹配项。"alowerupperb".gsub(/(lower)(upper)/){|s|$1+""+$2.upcase}

  5. ruby - 为什么我不能改变 self 的值(value)? - 2

    为什么我可以这样改变“self”:self.map!{|x|x*2}或者这样:self.replace(self.map{|x|x*2})但不是这样:self=self.map{|x|x*2}为什么Ruby不允许我更改“self”变量指向的对象,但允许我更改对象的属性? 最佳答案 不是答案,只是一个线索。a=[1,2]=>[1,2]a.object_id=>2938a.map!{|x|x*2}=>[2,4]a.object_id#differentdatabutstillthesameobject=>2938a.replace(a.

  6. ruby - 为什么括号内的换行符会改变算术结果? - 2

    为什么下面的表达式会这样解析?括号的优先级应该高于换行符,不是吗?3-(1+1)#=>13-(1+1)#=>2省略加号也会让表达式计算为2:3-(11)#=>2如果我声明为连续的换行符(转义)或将加号移动到第一行,则会实现所需的行为:3-(1\+1)#=>13-(1+1)#=>1 最佳答案 这是因为Ruby将新行识别为表达式的结尾,除非表达式不完整。例如,(1+1)与相同(1;+1)这与+1相同,因为返回了括号内的最后一个表达式。这进一步与1相同。如果行尾有+,则表达式不完整,因此会继续到下一行。这使得:3-(1+1)被解释为3-(

  7. ruby-on-rails - 设计 Controller 如何改变布局? - 2

    这个问题在这里已经有了答案:differentlayoutforsign_inactionindevise(8个答案)关闭7年前。如何更改设计Controller中的布局?

  8. ruby-on-rails - 在服务器端检测屏幕尺寸和像素密度? - 2

    我一直在做一些研究,我想我已经知道答案了,但我想知道是否有任何方法可以在不使用javascript或依赖CSS3媒体的情况下获得设备的屏幕尺寸和像素密度查询。本质上,我正在研究如何获取屏幕分辨率和像素密度,以便服务器可以决定在URI请求中为服务器提供哪个图像。到目前为止,我还没有发现任何证据表明这是可能的,但我想嘿,为什么不问问呢? 最佳答案 我不完全同意上面的正确答案。实际上,这个答案在很多情况下都是正确的……但理论上并非如此。通常向Web服务器发出的请求包含一个User-Agent字段,从理论上讲,该字段可用于识别有关设备屏幕分

  9. ruby - 以编程方式在 Ruby 中获取桌面的屏幕截图? - 2

    我问了这个关于takingapictureofawebpageprogrammatically的问题,我已经下载并获得了webkit2png工作(为博客等HTML页面拍照)。太酷了,谢谢你给我看!现在我想开始做更多的事情,比如能够在加载Flash网站和我的桌面后拍照。是否可以使用webkit2png为Flash网站拍照(考虑到您可能需要等待几秒钟才能加载)?但主要问题是,如何以编程方式为桌面拍照?这将使我能够更好地控制正在发生的事情。 最佳答案 您可以使用xwd(1)获取根窗口的屏幕截图:xwd-display:0-root|xwd

  10. ruby-on-rails - Rails 3.2.13 与 Rails 4.0.1 - 改变了吗?方法变了? - 2

    我最近注意到ActiveRecord对象上的方法changed?在Rails3.2.13和Rails4.0.1之间发生了变化。问题在于连接到数据库中整数字段的字段。假设我的模型Model带有number整数字段:#Rails3.2.13m=Model.lastm.number#=>5m.number='5hello'm.number#=>5m.number_changed?#=>truem.changed?#=>truem.changes#=>{:number=>[5,5]}#Rails4.0.1m=Model.lastm.number#=>5m.number='5hello'm.nu

随机推荐