Android -- 屏幕适配和图片处理

1 篇文章 0 订阅
1 篇文章 0 订阅

一、手机适配的概念:
1.使android应用程序适用于不同的国家语言、型号、尺寸和SDK版本等手机环境中,其主要功能和界面风格保持不变。
2.手机适配的重要性: 介于国内的繁杂的手机种类、不同屏幕尺寸和不同的版本,对于一款大众通用的应用,
必须要做适配,这是一项非常重要且繁锁的工作,便也是一件非常有意义的事情。
3.友盟 可以知道最新的统计数据,然后知道需要适配的机型和屏幕分辨率。

二、屏幕尺寸:
屏幕尺寸屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米。
比如常见的屏幕尺寸有:2.4、2.8、3.5、3.7、4.2、4.7、5.0、5.5、6.0等

三、屏幕分辨率:
屏幕分辨率是指在横纵向上的像素点数,单位是px,1px=1个像素点。
一般以横向像素数*纵向像素数 表示,如1960*1080
常见的屏幕尺寸:480*800,720*1280,320*480,480*854,540*960,1080*1920

四、屏幕像素密度(dpi):
屏幕像素密度是指每英寸上的像素点数,单位是dpi,即“dot per inch”的缩写。
屏幕像素密度与屏幕尺寸和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。
一英寸里面有160个像素,这个屏幕的像素密度就是160dpi。
那么,如何计算??—分辨率分别平方在进行开根号,最后在除以屏幕尺寸

五、像素 – px

我们应该是比较熟悉的,前面的分辨率就是用的像素为单位,大多数情况下,
比如UI设计、Android原生API都会以px作为统一的计量单位,像是获取屏幕宽高等。

六、独立像素密度–dp
dp:Density-independent pixel (dp)独立像素密度。标准是160dip.即1dp对应1个pixel,
计算公式如:px = dp * (dpi / 160),屏幕密度越大,1dp对应 的像素点越多。
上面的公式中有个dpi,dpi为DPI是Dots Per Inch(每英寸所打印的点数),也就是当设备的dpi为160的时候1px=1dp;

七、sp
即scale-independent pixels,与dp类似,但是可以根据文字大小首选项进行放缩,是设置字体大小的御用单位。

八、手机适配的简要描述:
适配主要分三个方面:

①语言适配;
②屏幕适配;
③SDK平台适配;
首先,语言的适配 主要是符合不同国家之间的语言;
重点是 屏幕适配 ,屏幕适配主要从屏幕大小、布局、图片入手。
在适配不同的尺寸的时候
1.使用”wrap_content” and “match_parent”和widget,最好不用固定大小
2.使用相对布局设计复杂的UI界面;
3.在使用.9图片时要注意:作用:9patch图片的作用就是在图片拉伸的时候保证其不会失真。
所以我们使用.9图片,让图片在指定的位置拉伸和在指定的位置显示内容,这样图片的边边角角就不会出现失真了。
图片有四条黑线,右、上这两条黑线主要是负责拉伸边框;左、下则负责内容显示区域的拉伸;
4.布局中多使用权重,少用固定的数据设置尺寸;
5.我们还可以选择百分比布局
(注:在6.0以上我们还要考虑权限的设置)

九、图片加载到项目中的常见处理和考虑:(缓存,压缩)

1.二次采样:

 options它是一个图片采样的参数,在第一次采样的时候只采样宽、高,而不采样具体的bitmap,取出图片的宽高:

int oldWidth = options.outWidth;
    int oldHeight = options.outHeight;

计算出宽高比,
        //把比例值设置给采样的参数。
    //可能会使得图片发模糊,但是节约内存
 options.inSampleSize=ratioHeight>ratioWidth?ratioHeight:ratioWidth;

    //不会造成图片模糊,但是消耗内存
    options.inSampleSize = ratioHeight < ratioWidth ? ratioHeight : ratioWidth;

第二次采样开始采样具体的bitmap,
        //为第二次采样做准备,不采样边界
    options.inJustDecodeBounds=false;
    //设置像素点的格式(有ARGB_8888,ARGB_4444,ALPHA_8)相比较ARGB_8888,图片效果差不多,但更加节省内存。
    options.inPreferredConfig= Bitmap.Config.RGB_565;

    //把第二次采样的结果返回。
    return BitmapFactory.decodeResource(res,id,options);


 2.三级缓存:

   内存,本地,网络

   假设一个 ImageView 想显示一张图片,于是去内存中寻找图片,没找到,去sd卡中寻找,
   没找到去网络中寻找,网络中找到了,放在sd卡上,再放到内存里,再显示出来。 
   ImageView 又想显示这张图片,于是去内存中寻找,找到了,直接显示出来。 
   ImageView又想显示这张图片(程序退出后再次进来),于是去内存中寻找,
   没找到,去sd卡中寻找,找到了,放到内存里,再显示出来 

                 ---------------------------------

   理论上,所有的图片都可以放入我们的三级缓存结构中。 
   但是在实际开发当中,并不是所有的图片都放入到我们的三级缓存结构中。 
   静态页面就有的页面结构的图片,这些图片一般不参与三级缓存。 
   三级缓存里放的都是和应用内容有关的动态变化的图片。 

   三级缓存+二次采样的优势: 
   大幅度减少OOM(Out of Memory)的出现。减少程序崩溃的可能性。 
   节省流量,请求过的图片就会在本地保存,再次使用只需要本地读取,不需要使用网络流量。 
   页面加载图片的速度大幅度提升,这使得如listview这样的控件滑动起来更加流畅。 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值