【问题标题】:Separate graphics for different resolutions, android不同分辨率的单独图形,android
【发布时间】:2014-03-24 04:06:19
【问题描述】:

我需要不同分辨率的可绘制资源,例如 320x480、800x480、854x480、800x600 1024x600、1024x768、1024x800。这是一个游戏,位图的缩放是不可接受的,因为他们对此非常敏感。 dpi 相关文件夹和与屏幕尺寸的组合(已弃用但没有其他方法可以为具有相同分辨率和不同 dpi 的大屏幕设置可绘制对象)是不够的。例如,如何区分 1024x600 和 1024x768 的图形?

停止使用自动拾取资源并切换到从资产手动加载的机制非常可悲。 有什么想法吗?

【问题讨论】:

  • 您可以在运行时获得分辨率并拥有不同的命名图形。这样你就可以为用户运行的任何分辨率调用正确的图形。
  • 这是解决方法,而不是解决方案。我只需要针对不同分辨率但具有相同布局的不同图形,例如 set background="@drawable/background" 但不同的名称会破坏此方案。 :(

标签: android screen drawable resolution


【解决方案1】:

我通常将 4 个资源文件夹用于可绘制对象:

  1. 320x480 的可绘制 mdpi
  2. drawable-hdpi 用于 480x800 和 480x854
  3. drawable-large-hdpi 适用于 600x1024、768x1024 等
  4. drawable-xlarge-mdpi 用于 800x1280

这些在我看来就足够了。此外,您无需担心不同的可绘制资源,例如屏幕尺寸为 800x480 和 854x480 的设备:您可以在屏幕边缘指定一个等于 27 像素的偏移量,并将您的游戏在屏幕上居中。希望这会有所帮助。

【讨论】:

  • 对于 1024xXXX 有很多问题,因为其中一半被识别为 mdpi,其中一些被识别为 hdpi,现在我使用 drawable-large-nodpi 和 xlarge-nodpi,但没有办法选择更具体的分辨率。
  • @SaTom,无论如何,几乎不可能涵盖所有分辨率,因此您必须使用最常见的分辨率。
  • 我指定的分辨率覆盖了大约95%的目标平台,我不需要支持所有的分辨率。
【解决方案2】:

如果您想要像素完美匹配,您始终可以通过简单的方法在运行时加载背景:

private void setBackgroundImage() {
   DisplayMetrics dm = getResources().getDisplayMetrics();
   int screenWidth = dm.widthPixels;
   int screenHeight = dm.heightPixels;

   // TODO: Conditional Structure to apply the right drawable 
   // ressource to be applied in the background

}

获得显示器的分辨率后,您可以通过setBackgroundDrawable 方法应用适当的背景。

【讨论】:

  • 我知道这个变种,但是让 ui 完全独立于逻辑真是太好了。但是有了这个技巧,我也会在 Eclipse 中丢失布局的预览,通常我在 xml 编辑器中编写 xml,但预览对 ui 构建有很大帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多