【问题标题】:Android emulators not simulating correct density or resolution. Possibly a surfaceview implementation issueAndroid 模拟器没有模拟正确的密度或分辨率。可能是表面视图实现问题
【发布时间】:2010-10-28 12:11:01
【问题描述】:

我正在构建一个小应用程序,它使用扩展了 surfaceholder.callback 的 surfaceview 类。它的实现就像 lunarlander 示例一样。我的问题是我使用的每种类型的模拟器(低、中或高密度)似乎并没有真正将屏幕的密度或分辨率更改为我所期望的。我最近询问了this question 关于堆栈溢出的问题,我突然意识到我没有对那个函数做任何错事,问题是不知何故我使用的任何模拟器都在中等密度下得到了认可。

高密度模拟器屏幕显示非常像素化的图像。中等密度的模拟器图像看起来很棒。低密度仿真器图像看起来像素化,但没有 hdpi 差。

我在每个模拟器上做了一个 mySurfaceHolder.getSurfaceFrame() 并想出了这个:

  • WVGA800 - 480x800 - hdpi - 生成表面 320 x 508
  • 默认 (HVGA) - mdpi - 生成 320 x 455 的表面
  • QVGA - 240x320 - ldpi - 生成表面 320 x 402

这些表面不应该分别为 480x800、320x480 和 240x320 吗?编辑:320x455 是有道理的,其余的可能在标题栏中占据。但是低/高呢?

所以,我不确定我的问题是否是:

  1. 我如何设置模拟器。 – 我使用 HVGA、QVGA、WVGA800 和 WVGA854 标准设置(无 自定义分辨率)

  2. surfaceview 类中的代码有问题。请注意,我没有手动设置大小,我依赖从这个回调方法返回的大小:

.

public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    thread.setSurfaceSize(width, height);
}

有什么想法吗?一如既往,感谢您的所有帮助!

【问题讨论】:

    标签: java android eclipse android-emulator surfaceview


    【解决方案1】:

    好吧,我猜这归结为 android 文档中的一个错误。

    问题基本上是我使用的任何模拟器都被模拟为中等密度屏幕,除非以下行在 Android 清单文件中。所有资源默认为 mdpi 文件夹,永远不会从 hpdi 文件夹中提取。然后会自动执行某种缩放操作,因为它将 HDPI 屏幕视为 MDPI 屏幕,从而解释了屏幕上的“像素化”图像。

      <supports-screens
            android:anyDensity="true"/>
    

    The documentation states:

    “android:anyDensity 指示应用程序是否可以适应任何屏幕密度。假设较旧的应用程序(API 级别 4 之前)无法适应所有密度,默认情况下为“假”。假定使用 API 级别 4 或更高级别的应用程序能够,默认情况下这是“真”。你可以在这里明确地提供你的能力。 “

    我使用的是 API Level 8,并且必须提供这条线来模拟高密度设置的屏幕。

    【讨论】:

      【解决方案2】:

      Surface 没有显示工作区域?不包括状态栏和可能的应用程序标题栏。它可以给你下降而不是像素。

      像素 = 下降 *(密度 / 160)

      【讨论】:

      • 我的帖子说明了我用来返回表面大小的方法。这个方法返回一个以像素为单位的矩形还是不正确的?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      相关资源
      最近更新 更多