当前位置:首页 » 图片资讯 » android查看图片怎么适配
扩展阅读
美女健身跳河视频 2023-08-31 22:08:21
西方贵族美女照片真人 2023-08-31 22:08:15

android查看图片怎么适配

发布时间: 2023-01-12 17:55:34

① android中不同尺寸的图片适配手机问题

在运行时,程序为最佳显示效果提供了三种方法:
1.图片缩放
基于当前屏幕的 精度,平台自动加载任何未经缩放的限定尺寸和精度的图片。如果图片不匹配,平台会加载默认资源并且在放大或者缩小之后可以满足当前界面的显示要求。例如, 当前为高精度屏幕,平台会加载高精度资源(如图片),如果没有,平台会将中精度资源缩放至高精度。
2.自动定义像素尺寸和位置
如果程序不支持多种精度屏幕,平台会自动 定义像素绝对位置和尺寸值等,这样就能保证元素能和精度160的屏幕上一样能显示出同样尺寸的效果。
3.兼 容更大尺寸的屏幕
当前屏幕超过程序所支持屏幕的上限时,定义supports- screens元素,这样超出显示的基准线时,平台在此显示黑色的背景图。例如,WVGA 中精度屏幕上,如程序不支持这样的大屏幕,系统会谎 称是一个320×480的,多余的显示区域会被填充成黑色。

② Android Studio 图片适配/使用之SVG

适配可以说是Android的老大难问题了,Android厂商众多,设备碎片化严重.大屏小屏,全面屏,异形屏数不胜数
以下是10分钟内能找到的数据统计
友盟+,全域罗盘

这些还仅是占比较多的设备,并不全面
而且同样的屏幕尺寸也存在不同的分辨率
按照友盟的粗劣统计,就算主流10种屏幕尺寸,加上每种尺寸又有不同的宽高比和分辨率.
取10种尺寸,平局每种尺寸有2种宽高比,又有3种分辨率
那么就需要适配10 2 3=60种
但是实际上需要适配的主流手机设备至少也要超过100种吧(单指国内范围)

如果你已经解决了适配的问题,那么SVG仍然能带给你一些方便

VG是指可伸缩矢量图形 (Scalable Vector Graphics),它不同于传统的位图,不是通过存储图像中每一点的像素值来保存与使用图形,而是通过 XML 文件来定义一个图形,通过一些特定的语法和规则来绘制出我们所需的图像——同样是使用一张图片,SVG 的方式是事先定义好怎么去画这个图,然后等要用的时候再把它去画出来,而使用传统的位图的话就是已经有了画出来的图,然后要用的时候直接把画好的图拿出来用。

创建一个xml文件在drawable中

SVG使用了 </vector> 标签,内容的绘制使用了 <path/> 标签.

这里可以生成两种方式,

这里有很多很多图案,甚至还有一些Ios的预设图标

这样一个看似复杂的图片就搞定了

其实AS4.0中新创建的项目中的2个图标也都是用SVG生成的(可能是我默认minSDK是23的原因,没细究)
ic_launcher_background 中写多个path标签的方式能让绘制内容更有阅读性,更易后期修改维护,但是点击标签右边是看不到对应哪一个位置的.尽量给每个path再加上注释就方便日后读写了.

③ 安卓启动页使用layerlist+.9图片适配方案,解决图片拉伸问题。

手机冷启动app的时候,我们会在启动页的主题设置一个主题

但是如果只是放一张图片的话,会发现在高分辨率的手机上会出现拉伸的情况,这时候使用layerlist配合使用:

但是当我们使用layerlist的时候,在某些手机上还是会出现图片拉伸的情况,这个时候可以考虑将该图片制作成.9的图片,保持一些不该被拉伸的地方,这样适配起来比较有用;

.9图片(红色的圈圈)最好在左边的最下面和上面的最右面设置可拉伸的点,这样不会其他地方就不会被拉伸

假如你拉伸的点在左上和上面的左面的话,如果图片相对于屏幕分辩率过小的话,也会出现拉伸之后,导致图片其他的地方会被挤开,导致位置不对,所以最好设置在左下和上面的最右边,

最后启动页的背景一定要和启动页的布局的背景设置成一样的填充模式,不然还是会给用户一种闪一下的效果:

和layout中的

保持一致;

如果有更好的方法,多多留言,我已经是没有别的好的方法了

④ Android 拍照获取缩略图以及完整图片(适配androidN)

takePictureIntent.resolveActivity(getPackageManager()) != null
在官方文档中有描述:startActivityForResult()方法受到调用resolveActivity()的条件的保护,该方法返回可处理该意图的第一个活动组件,执行此检查很重要,因为如果您使用没有应用程序可以处理的意图调用startActivityForResult(),则您的应用程序将崩溃。所以只要结果不为空,就可以安全的使用意图,大概意思是检测手机中有没有相机。

另外一种检测相机的方法是

required=true 表示要安装该应用,手机必须有摄像头该硬件。要不然不允许安装

鸿洋的博客关于android7.0 以及 4.0 拍照封装的处理(点击跳转)

类似介绍比较好的文章推荐-Android 调用系统相机拍照攻略(已适配Android N)

⑤ Android10以上拍照和选择相册适配以及向下兼容适配

最近一直被Android10相关的适配搞得焦头烂额,之前也听说过android10中的所有的视频,音频以及图片等资源为了统一的管理,统一放在一个共有的文件下,也就是所谓的沙箱。看了一下其他人写的文章,也提供了一种简单粗暴的方式也就是在清单文件application下配置#android:requestLegacyExternalStorage="true"#,但如果android11出来又得适配了,android11是禁止除了共有文件夹下新建视频,音频以及图片等文件。不然就会报找不到文件相关的错误,好了说到底我们还是得花点时间去适配android10以上的沙箱适配。

进入正题,接下来我们就来适配Android10相关的拍照以及选择相册并兼容android10以下的绝大部分的适配。

进入系统相册的操作都是一样的这里就不赘述:

主要的还是要对返回的data进行处理,也就是把uri转换成文件File的路径path

当然了拍照和位图Bitmap相关的适配是一样的。

7.0以上Android版本的路径配置
第一步

@xml/file_camera_paths 文件配置

拍照首先需要申请拍照权限
申请完后调用camera就可以拍照,拍照主要就是在调用相机的时需要自己去配置文件存储路径。

回调处理这里我就不赘述了 主要是对Android10以上关于图片配置相关的处理
既然关于Android 10那么我们也讲一下关于定位方面的适配,Android10以上需要在清淡文件中添加一个新的定位权限

⑥ Android屏幕适配(4)常见:第三种

前言:
Android屏幕适配(1)基础知识篇
Android屏幕适配(2)常见:第一种
Android屏幕适配(3)常见:第二种
Android屏幕适配(5)常见:归纳总结
常见的屏幕配置问题(一些特殊的暂时除外,曲面屏,分屏模式,刘海屏),我归档为3种情况来分析一波
1.相同尺寸,不同分辨率屏幕
2.相同分辨率,不同尺寸屏幕
3.不同分辨率,不同尺寸屏幕

场景:
假设我们现在市面上的手机就只有oppo,vivo以下2款手机
其他的手机厂商和oppo,vivo的其他机型的手机全都洗白了
全世界的人都只有使用用这2款手机
一个oppo,300x400,5寸的手机,卖5000000RMB
一个vivo,600x800,5寸的手机,卖10000000RMB
我现在特别土豪,为了给大家写这篇帖子
我2个手机都买了
Android屏幕适配(2)常见:第一种
...
100年后,又有一个小米手机厂商出来了,发布了一款300x400,10寸的手机,10000000RMB
假设下图中里面的就是5000000RMB的oppo,外面的就是10000000RMB的小米
Android屏幕适配(3)常见:第二种

这时候我们
相同尺寸,不同分辨率屏幕
相同分辨率,不同尺寸屏幕
都解决了,然而这又有什么卵用?
告诉用户我们的APP只支持300x400分辨率的手机使用?
还是告诉用户我们的APP只支持5寸屏幕的手机使用?

第三种情况:不同分辨率,不同尺寸屏幕(任意手机)
只也是我们的终极目的,前面2篇适配只是做一个铺垫,让这里讲解的时候提到的东西更容易被理解
如果这里分析的还有未分析到的地方欢迎大家提出,一定及时修正

咱们还是先来个特殊的试试水,把300x400,5寸的同时放大2倍600x800,10寸
按惯性思维,这里同时放大2倍,肯定一张图片会自己也放大2倍,然后就适配了啊

使用PX

改用DP

GG了!三板斧劈完了!还是未能解决适配问题!!!
理性分析走一波:
1.PX不行的原因:(参考 Android屏幕适配(2)常见:第一种 )
PX是像素点单位,就是分辨率单位,不论屏幕尺寸怎么变只要分辨率没变,它所占的屏幕宽比都是一样的
也就是说当我们在使用PX的情况下,市面上的手机只要跟我们开发时候的分辨率是一样的都能适配
宽占比=图片宽PX/屏幕分辨率宽
分辨率改变
被除数不变,除数变,结果变=图片宽PX不变,屏幕分辨率宽变,结果变
所以这里的不同分辨率,不同尺寸屏幕情况是不满足分辨率相同原则的
所以这里的PX是不行的.

2.DP不行的原因:(参考 Android屏幕适配(3)常见:第三种 )
注:一下解释需要一些基础知识,建议先看 Android屏幕适配(1)基础知识篇 再往下看
无论我们开发中用什么虚拟单位(系统帮我们做了一次适配的单位),怎么个适配,最后显示在我们屏幕上都是以PX为单位的(构成图像的最小单位)
其实DP这个虚拟单位,最终显示的时候就是获取屏幕信息,再根据自身的算法规则,帮我们算出来的PX做为单位显示到屏幕上,但是它的算法已经是我们Android固定好了的(算法:规定以160dpi为基准,1dp=1dip=1px)
好,有了以上了解我们再回头来分析一下当前场景下的DP怎么就不行了

以上就是通过DP的固定算法换算PX的过程(PX=DP Desity=DP (DPI/160))
1.根据公式发现在同一DP宽度情况下改变PX值的唯一变量就是DPI了
2.结合以上计算过程,发现DPI都是100DPI,所以换算出来的PX肯定是相同的,也就是上图中的93.75PX
3.PX都相同了,那就又回到上面的PX不行的原因了!
所以这里的DP是不行的.

理性分析一波完不行的原因后,总该有点启发,或者思考方向吧!
整理归纳一下再看看有点启发没有--> 走起(我这里只知道PX跟DP,其他的一概不知道):
1.最终都是以PX显示到屏幕上
2.Android有一套适配置算法:DP,但是不能全部适配各种情况
3.我如果在开发的时候使用PX呢.结果如何? 那肯定就是死敲敲了.已经写死了,再也无法适配了.果断舍弃
4.有一点肯定的认知,在开发的时候我不能用死单位,还是需要使用虚拟单位,再生成PX的时候能生成我心中想要的PX就好了
5.那我到底需要在什么情况下生成多少PX呢?我也不知道,还是先把这个搞明白了来

就上面这种情况.我想达到的效果是怎么样的?
5.1占屏宽比在2个屏幕上都要是一样的,也就是说在300x400,5寸上75PX图片需要在600x800,10寸上是75PX,占屏宽比都要达到25%,见下图

对的,这就是我心中的蓝图了!
再回到上面DP不能适配的情况看看

这里的600x800,10寸上也就是说,占屏宽比也能达到:31.25%,跟300x400,5寸上一样就行了
此时的占屏宽比:31.25%就是图片PX要达到187.5PX

我:开发者
你:屏幕
这种情况下.我想做屏幕适配,其实就是我要来巴结你的节奏啊!

你说:我告诉你啊.开发者,在我这里其他的我都不认识,我只认识PX.你拿一个187.5PX的图片来.我立马适配,其他的都不用谈了!

我说:大哥你看能不能通融通融.我实在是搞不定了,你给我把93.75PX转成187.5PX把,立马递上一根自己都舍不得抽的,原产巴西的大雪茄!

你说:不是我不想.我是做不到.我只负责显示PX.其他的撒都不清楚,给你指条名路.你去求我们领导Android系统

Android系统说:我给屏幕小弟显示的PX算法都是固定死了的PX=图片宽DP Desity, Desity=DPI 160,不会为你一个人开后门.大家都在这个基础上做开发.众生平等!...... 虽然算法是固定死了的.但是我不是要提供限定符(SW)给你们吗?就是为了解决你们开发者的这个问题而存在的

我说:好的.我去看看, 限定符(SW)(Android屏幕适配(1)基础知识篇 )

结合SW限定符计算得到:
300x400,5寸屏 的限定符SW=300PX/Desity=300PX/0.625=480
600x800,10寸屏 的限定符SW=600PX/Desity=600PX/0.625=960
所以就是SW480和SW960

下面使用Android官方给我们提供的插件ScreenMatch(具体使用详情网络一大堆.查一下就明白了)自动给我们生成SWXXX文件

最后:
有什么理解不到位地方欢迎指正,以上理解均来源与对一些基础知识概念的理解,未实操证实过!
这种适配基本能解决大多数问题.还有一些小部分的就要特殊处理了,除了这种适配.还有其他的,以后再补上

建议ScreenMatch还是用base_dp=360,这个值基本兼容大部分屏幕.具体可以拿几个现目前市面上的手机真是分辨率跟屏幕尺寸算一算.我这里的例子只是举的特殊了.像SW960这种基本都不存在的.再说说之前留下的问题
提问 : 你这个例子举得太特殊了如果是300x400,5寸跟500x800,5寸占比就不同了
答:自己算一下SW是多少.生成一个对应的SW就行了,其他的任意机型同理

⑦ Android 启动图适配

3.15更新 ,项目上线后,在华为某些机型上出现了崩溃的情况

原因是高分辨率的图片放置到了低dpi的drawable文件夹中的,对应就是我们的drawable-long文件夹,但为什么其他机型不会出问题呢?我摸索了一下,发现这台华为机型被用户调节了显示设置

这里显示大小调大了,相当于把屏幕的dpi调小了,从而加载drawable-long中的图片时会把图片放大,导致bitmap too large的问题。

一般别的机型只能调节字体大小,但无奈华为市场份额较高,肯定要兼容,所以这种方案不能用了。

我的解决方法是用回9.png的方案,之前测试不成功是因为自己制作9.png图的时候底部和右边的线画错了,导致显示区域出现问题,重新制作就好了。

原文

众所周知,安卓不同机型的屏幕尺寸千差万别,百花齐放,但在很长一段时间里,安卓手机屏幕的长宽比大致都在16:9上下浮动。所以我们之前做APP启动图的时候,设计往往只会出一张16:9的图给我们,在不同机型上不会有太明显的拉伸效果。

直到出现了全面屏的机型,特别是屏幕比例在2:1以上的机型,如果还是用一张16:9的图去显示,那么拉伸效果是很明显的,我以微信的启动图为例子,在1440*2960的Pixel 3XL机型上,用16:9的启动图是这样的效果(地球都变成椭圆了)

这种情况一般有几种解决办法

1、把启动图制作成9.png图,9.png是我们安卓开发的老朋友了,一般这种图片拉伸问题都可以用9.png来解决, 但启动图有点特殊,显示完启动图后常常会显示开屏广告,如果开屏页面的布局和广告逻辑比较复杂(像我司项目的开屏,既有半屏广告又有全屏广告,还有gif、视频广告等),在原有布局不改动的情况下,用了9.png会导致各种奇怪的问题

2、把开屏图制作成layer-list的drawable文件,底层layer设置成纯色(如纯白纯黑,根据开屏图颜色而定),上层放置关键元素(如项目logo),这种方式适合开屏图比较简单,而且开屏图背景可以和底层颜色融合的情况

3、制作多种尺寸的开屏图,分别放到不同的drawable文件夹下,考虑到资源打包的大小和UI的工作量,我们分别准备16:9和2:1的开屏图也够用了,然后问题在于,我们应该把16:9和2:1的图分别放到哪个文件夹下?我在模拟器选取了覆盖主流屏幕的机型

16:9的启动图我们根据图片实际分辨率放置在drawable-xhdpi或者drawable-xxhdpi文件夹是比较合适的,那么2:1的应该放在哪里呢? 查阅官方文档,发现有这样的限定符

即drawable-long和drawable-notlong,分别对应宽屏和非宽屏,但是这个限定符是API 4中增加的,描述中的WQVGA、WVGA、FWVGA在现今主流手机中也不存在了,本着试一试也不会亏的精神,我尝试在工程中增加了drawable-long文件夹,并把2:1的启动图放进去,运行,奇迹出现了,Pixel 3和Pixel 3 XL这种全面屏的手机居然可以取到这个文件夹里的图片,而Nexus 4、Nexus5、Nexus6等接近16:9的手机仍然是取drawable-xhdpi或者drawable-xxhdpi的文件夹,这就解决了全面屏手机启动图拉伸的问题。看起来,虽然drawable-long的文档描述有点旧,但谷歌应该是有不断更新它的适配逻辑的,我测试用的模拟器全部都基于Android5.1,而用我自己的Android 10真机测试也是没有问题,大致得出结论这个方案是可行的

⑧ Android 适配一篇就够 - 编译版本supportAPI 兼容图片适配

本文介绍 Android 不同系统及图片资源的常见适配问题。

基本原则:先查找和屏幕密度最匹配的目录,如果没有,则依次向高密度目录查找,如果查到最高也没有,则查找 drawable-nodpi 目录(该目录无论设备密度如何,系统都不会缩放此目录中的资源),如果还是没有,再依次像低密度目录查找;

我们以具体的实例分析该问题。实例:一个本该放在 hdpi(对应设备 dpi:240) 的图片,被放在了 xxhdpi(对应设备 dpi:480) 目录,图片还是在 dpi 为 240 的设备上显示时,大小是放大还是缩小?放大或缩小几倍?内存占用是增大还是减小?增大或者减小几倍?

首先要了解图片内存占用计算公式: 内存大小 = 分辨率 x 每个像素点大小 ,其中分辨率是图片加载到内存后像素点的总个数(宽度 x 高度),每个像素的大小取决于使用的数据格式,如 ARGB_8888 格式就会占用 4 个字节。这里特别说明了,分辨率是图片加载到内存后的像素点个数,并不是加载前的像素数,二者关系为:加载后宽度/高度 = 加载前宽度/高度 x (设备 dpi / 图片所在 drawable 的dpi)。因此答案也就一目了然了,新的宽高都减少了1/2,因此 总内存大小减小了1/4

⑨ Android切图适配知识点汇总

对于在工作中没有接触过安卓版本app,或是面试的时候会被问到安卓分辨率等问题,可以通过本文对安卓切图有所了解。我在以往的工作中也没有接触过安卓设计等一系列问题,但是看完一些文章后,大致对安卓分辨率等知识点有所了解。此文是对自己所了解到的知识做一个总结,也希望能帮助到不了解安卓一系列问题的同行们,好啦,马上进入正题!

基本概念
1、手机屏幕尺寸计算方式:对角线尺寸/2.54(1英寸=2.54厘米)
2、分辨率:屏幕上显示的像素个数,单位尺寸内像素点越多,显示的图像就越清楚。

上图中红框框出来的是现在市场上主流的分辨率,只要记这三个就可以。其他的已被淘汰。

3、屏幕密度:屏幕每英寸有多少个像素。
4、单位:dp是开发中用于描述尺寸和间距。
sp是用于描述字号和行距。

用哪种分辨率来设计?
原则上需要为不同的分辨率去单独设计效果图,但由于实际情况,只需要采用一种分辨率去设计,目前多数采用720*1280的分辨率。

需要提供几套切图?
只需要一套切图即可
720*1280尺寸的切图可以适配其他机型,有些特殊的切图需要单独适配的,比如icon等。
适配480 800的机型,只需要把切图/1.5即可。
适配1080
1920的机型,只需要把切图*1.5即可。适配此分辨率的时候,需要在720 1280下画图的时候,尽量采用矢量图形来画图。
例如,图标是48
48的时候,适配1080 1920点时候,48px*1.5=72px.把矢量图形调整为72px即可。开发会把切图放到xxhdpi的文件目录下,就会自动适配1080 1920
同样,适配480 800的时候,48px/1.5=32px.开发把切图放到hdpi文件目录中,会自动适配。
720
1280的切图,开发放到xhdpi的目录下。
注:设计图片的时候尽量采用偶数。

需要提供几套标注?
在720*1280分辨率下进行设计,此分辨率下1dp=2px.
可以直接使用dp标注尺寸,sp标注文字大小

注:使用dp标注尺寸。使用sp标注文字大小

该使用什么字体及字号?
中文字体:思源
英文字体:Android 4.x及以上采用Roboto,Android 2.x和3.x采用Droid Sans.
字号:12sp、14sp、18sp、22sp(也可根据实际情况调整)

目前掌握以上知识点,可能多少也有些小问题,欢迎有经验的大神指正、指导。谢谢啦~