Android的屏幕适配,图片适配
来源:互联网 发布:windows 10桌面美化 编辑:程序博客网 时间:2024/05/18 12:38
5中适配
1图片适配(不同像素密度的手机加载不同资源文件夹的图片)
已知屏幕的宽和高通过勾股定理计算出屏幕的密度(dpi)
例子:
已知1280*720的手机(5寸)
1280(屏幕的高度上有1280个像素点)
720(屏幕的宽度上有720个像素点)
勾股定理
1468.6(斜边的像素点) = Math.sqrt(1280*1280+720*720)(开方)
每英寸上的像素点就屏幕密度
1468.6/5(屏幕英寸) = 293.72 dpi(密度)
根据这个密度值对照下图,系统就加载xhdpi下面的图片
文件夹屏幕比例 dp转px
ldpi 320*2401dp= 0.75px
mdpi480*3201dp=1px
hdpi 800*4801dp=1.5px
xhdpi1280*720 1dp=2px
xxhdpi1920*10801dp=3px
怎么保证在不同手机上图片不变形?
利用自定义控件,在图片的控件外层包裹自定义控件全路径名,该自定义控件继承LinearLayout
<com.itheima.googleplay32.views.RatioFrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:picRatio="2.43" app:relative="width"> <ImageView android:id="@+id/item_subject_iv_icon" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY"/></com.itheima.googleplay32.views.RatioFrameLayout>
在onMeasure方法中
已知图片的宽度动态计算高度
/** * 已知宽度动态计算高度 *///图片的比例值(根据图片的宽和高计算的)float imageScale = 2.42f;//获取模式int mode = MeasureSpec.getMode(widthMeasureSpec);//模式等于确切的模式if(mode == MeasureSpec.EXACTLY){ //获取容器的宽度,使用该方法的前提是,必须知道模式 int preatWidth = MeasureSpec.getSize(widthMeasureSpec); int preatHeight = (int) (preatWidth/imageScale+.5f); Log.d(TAG, "onMeasure: --------"+UIUtils.px2Dip(preatHeight)); //保存测量结果 setMeasuredDimension(preatWidth,preatHeight); //孩子的宽度 int childwidth = preatWidth - getPaddingLeft() - getPaddingRight(); int childHeight = preatHeight - getPaddingBottom() - getPaddingTop(); //根据孩子的宽和高或的带有模式的宽和高 int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(childwidth, MeasureSpec.EXACTLY); int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(childHeight,MeasureSpec.EXACTLY); //测绘孩子 measureChildren(childWidthMeasureSpec, childHeightMeasureSpec);}else{ super.onMeasure(widthMeasureSpec, heightMeasureSpec);}
2demin.xml适配
根据不同的手机新建values-1280x720文件加,在该文件夹下创建dimens.xml
系统会根据当前手机的密度,取对应的文件夹下找对应的值
默认会找values文件夹下的值,也要在默认的时候创建默认下的width值
在xml文件夹中引用
3布局适配(不同像素密度的手机加载不同layout的布局文件)
布局适配和dimen适配的原理一样,新建一个指定手机的布局Layout-1280x720,系统会根据当前手机的密度,取对应的文件夹下找对应的值
4java代码适配(控件的宽高,根据屏幕的宽高比例值去设置的)
以textView显示屏幕的1/2为例
在任何手机上的运行效果都是一样的
5权重适配(这个基本都知道就是weight)
0 0
- Android 屏幕适配-图片
- Android的屏幕适配之图片加载适配
- Android的屏幕适配,图片适配
- android屏幕适配不同的资源图片、布局
- Android屏幕适配不同的资源图片、布局
- android屏幕适配不同的资源图片、布局
- Android屏幕适配不同的资源图片和布局
- Android屏幕适配不同的资源图片、布局
- Android屏幕适配不同的资源图片、布局
- android屏幕适配不同的资源图片、布局
- android屏幕适配不同的资源图片、布局
- Android屏幕适配不同的资源图片、布局
- Android自定义属性实现图片屏幕的适配
- Android图片与屏幕适配问题
- android图片根据屏幕适配
- Android图片与屏幕适配问题
- Android中图片适配屏幕问题
- android屏幕适配——图片
- [DFT] Spyglass DFT
- python——怎样导入其他地方的python模块
- UVa - 1220 - Party at Hali-Bula ( 树形DP 求最大独立集 )
- line-height的继承性,height line-height 背景填充 的方式
- 9个基于Java的搜索引擎框架
- Android的屏幕适配,图片适配
- Qt学习笔记之使用HTML在TextEdit中构造表格显示数据
- 立体匹配CNN篇(一) :[LW-CNN] look wider to match image patches by cnn
- Java程序员从笨鸟到菜鸟之(一百零六)java操作office和pdf文件(四)页面列表导出cvs,excel、pdf报表.
- The environment variable JAVA_HOME does not point to a valid JVM installation
- 将两个有序的单向链表整合成一个有序单向链表
- 消息队列-RabbitMq(PHP)
- Problem-1042 N!
- Shell脚本编程(二)