Graphics-Density (下)

2024-02-14 10:18
文章标签 density graphics

本文主要是介绍Graphics-Density (下),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如何支持多屏幕配置

Android系统本身自动可以支持屏幕自适应,但有时也需要应用提供屏幕配置相关的资源以达到更好的用户体验:

  • 为不同屏幕大小提供不同的Layout.
  • 为不同屏幕密度提高不同的bitmap图像资源。

Android系统运行时根据当前屏幕配置选择合适的Layout和资源,如果对于的屏幕配置没有提供备选资源,则选用缺省资源进行缩放。

下表列出了Android屏幕配置可能的组合:






来看看apidemos中定义的资源目录:





比如对于drawable 来说, drawable 不带任何后缀,为缺省drawable 资源, drawable-hdpi 为高密度屏幕使用的drawable资源, drawable-ldpi 为低密度屏幕使用的drawable 资源等。

同样values 定义了多种不同配置下使用的资源。

对应不同屏幕密度下的Bitmap资源定义(.png. .jpg, .gif ,.9.png)一个原则上使用 3:4:6:8的比例来为四种不同屏幕密度提供图像资源,比如对于一个“中等密度”下像素大小为48X48的资源,

  • Low-density: 36X36
  • Medium-density: 48X48
  • High-density: 72X72
  • Extra high-density: 96X96






关于Density的一些额外的考虑

本节内容对于大部分应用不重要,除非你的应用在不同屏幕配置时显示上出了问题。

为了更好的理解在应用绘制图形时如何支持不同的屏幕密度配置,你应该知道下面由Android系统提供的一些支持:

Pre-scaling of resources (如bitmap drawable 资源)

Android系统根据当前设备屏幕配置不进行缩放选取设备配置相关的资源(比如对于高密度屏幕选取drawable-hdpi目录下的Drawable资源)。如果没有找到当前屏幕配置对应的资源,Android使用缺省资源(在drawable 目录下的资源)放大或是缩小以适应屏幕。Android应用认为缺省资源(比如drawable 等不带后缀的目录下)是对应于基准屏幕配置(mdpi)的资源。pre-scaling 意思就是Android系统为当前屏幕密度自动缩放Bitmap来适应屏幕的过程。

此时,如果你需要知道这些pre-scaled资源的大小,Android系统返回的是缩放之后的大小,比如对应于mdpi 下50X50像素大小的图像在hdpi屏幕下会放大到75X75像素大小,此时查询图像大小返回值为75X75. 如果你不想让Android对一些资源进行pre-scaling,可以将这些资源放在带nodpi后缀的目录下:比如 /res/drawable-nodpi。

Density 例子中的 no-dpi resource drawable 显示如下:




像素大小和坐标的自动缩放

一个应用也可以通过在Manifest文件中将android:anyDensity设为”false”或在代码中将bitmap的isScaled设为false关闭pre-scaling 。在这个情况下,Android系统会自动缩放以pixel为单位的的像素值和坐标。结果使得在不同屏幕大小的设备上仍可以显示和基准屏幕下类似的物理尺寸大小。这时如果需要返回Bitmap的大小,系统返回的是缩放后的像素值,而非实际物理像素值。

大部分情况“不应该关闭pre-scaling”,而是通过提供屏幕配置相关资源来支持多种屏幕配置。

运行时缩放Bitmap

如果应用在内存中动态创建一个Bitmap对应,Android系统会认为这个Bitmap对应于基准屏幕配置(中等密度)。缺省情况下,如果在屏幕上显示这个Bitmap,Android系统会自动缩放以适应当前屏幕。 可以使用setDensity为Bitmap 设置显示密度。

如果使用BitmapFactory来创建Bitmap对象,可以使用BitmapFactory.Options来定义Bitmap的属性,如果将inScaled设为false,则会关闭pre-sacling.

下图为Density例子 显示 pre-scale 和auto-scale 显示 low (120), medium (160), high (240) 的图像中高密度屏上显示的效果:





注意这个例子的Title : Density:High ,可能你的设备运行时结果不一样:

1
this .setTitle(R.string.density_title);

标题的资源为R.string.density_title ,它在values ,values-large ,values-small中用不同的定义, 在应用运行时,Android系统会根据当前屏幕配置选取合适的资源,你可以多创建几种不同大小的模拟器,看看结果会有所不同,由此也可以理解本例和Android选取资源的机制。

下表给出模拟器支持的不同屏幕大小和密度的组合:













这篇关于Graphics-Density (下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/708227

相关文章

Detection简记2-DAFE-FD: Density Aware Feature Enrichment for Face Detection

创新点 1.使用密度估计模型增强检测中的特征图 总结 整个流程还是很清晰的。 conv1-3的特征图经过密度估计模块由检测器D1进行检测。 D2-4分别是四个检测器。 FFM是特征融合模块,将不同层不同大小的特征融合。 FFM网络结构如下: 首先使用1X1的卷积减少两组特征的厚度到128,然后使用双线性插值统一两组特征图的尺寸,然后相加。类似于cvpr2017的SSH。 多尺度检测器的网

2020-08-21 利用Graphics.DrawMeshNow绘制运行时Gizmos,VR可用,HDRP可用

先放效果图: 功能本身为测试用例,所以写的并不是很严谨,三角线使用的是缩放后的圆柱Mesh,黄色使用Box的Mesh,绿色使用Sphere的Mesh。 box和sphere也可以同时生成多个,但需要修改VrGizmos.cs中的两个方法DrawSphere、DrawBox,逻辑类似三角线的方法DrawSegments 放上VrGizmos.cs的源码: using System.Coll

驱动开发系列15 - Linux Graphics Xorg 详解

目录 一:概述 二:图形硬件概览         1. 帧缓冲区         2. 显卡的图形加速功能 三:X图形(Xorg)         1. 显示管理器(Display Manager),启动和登录         2. X服务器实例         3. X网络协议和客户端库         4. X客户端/服务器2D api         5. X客户端/服务

驱动开发系列16 - Linux Graphics DRM和KMS内核模块介绍

一:概述         “直接渲染管理器”(DRM)和“内核模式设置”(KMS)API 是 Linux 图形系统的重要组成部分。然而,关于它们具体是什么的文档非常难以找到——而谷歌搜索到的大部分内容都是完全过时的。看起来在这个领域工作的人们太忙了,无法进行文档编写。这篇文章提供了关于 DRM 内核模块内部实现细节的更详细信息。 二:DRI、DRM和KMS的目的         一开始,所有

驱动开发系列15 - Linux Graphics 图形生成显示过程

目录 一:概述 二:图形硬件概览         1. 帧缓冲区         2. 显卡的图形加速功能 三:X图形(Xorg)         1. 显示管理器(Display Manager),启动和登录         2. X服务器实例         3. X网络协议和客户端库         4. X客户端/服务器2D api         5. X客户端/服务

驱动开发系列15 - Linux Graphics 图形生成和显示过程

一:概述         这篇文章简要概述了在Linux系统上生成图形的过程。 二:图形硬件概览         1. 帧缓冲区         所有的显卡都会生成一个“帧缓冲区”,它是一个块显存,里面存放着RGBA像素数据,并且显卡知道这块区域是“扫描输出缓冲区”,即用于显示的缓冲区。          对于模拟信号输出来说,显卡的输出电路会周期性读取帧缓冲的每个像素,并在合适的时间产

Graphics简单汇总

1、主页面布局文件 activity_main.xml(只有2个button按钮) <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"andro

Log,Toast,SPUtil,Density,SDCard,ScreenUtil,AppVersion,KeyBoard,NetWork,HttpUtil工具类

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自【张鸿洋的博客】 最近统一整理下工具类,以下是栏目,慢慢的就会越来越丰富 http://blog.csdn.net/u013210620/article/category/6251289 1、LogUtil package com.exampl

Android 5.0 parseSdkContent failed Could not initialize class android.graphics.Typeface

在进行android开发过程中,忽然发现经常弹出来parseSdkContent failed 这个错误,然后google了下解决办法 Note: it happens when you have 2 versions of SDK and eclipse, both in the same computer (and using the same .android file), if yo

驱动开发系列12 - Linux Graphics 图形驱动概述(一)

目录 一:概述 二:图形硬件         2.1 硬件概述         2.2 总线类型         PCI(外设组件互连)         AGP(加速图形端口)         PCI-X         PCI-Express (PCI-E)         2.3 虚拟内存和物理内存         显存         表面         3D引