屏幕适配的终结者
来源:互联网 发布:如何运用办公软件 编辑:程序博客网 时间:2024/05/16 18:28
原文链接http://blog.csdn.net/lfdfhl/article/details/52735103
原理,根据不同屏幕的宽高与原图的宽高,拿到缩放比例,进行等比例缩放,不会造成拉伸或变形
详细介绍了 屏幕适配框架,但是 没有源码,真的找不到源码,索性就尝试动手把这个框架做一下,写个工具类
只需要一套切图,两行代码搞定让人蛋疼的适配
用这个把之前项目中的图片在不同屏幕上拉伸的问题解决了,
使用
注:宽高要用px,不要在使用dp或sp
public class MainActivity extends AppCompatActivity { private LinearLayout viewById; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewById = (LinearLayout) findViewById(R.id.activity_main); // MultiDensityUtils.init(this); MultiDensityUtils.StartScale(viewById); }}
package com.example.administrator.multidensityutils;import android.content.Context;import android.graphics.drawable.Drawable;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;/** *@author great小海海 *@date 2017/2/18 上午 9:54 *@Description 屏幕适配缩放工具类 *@param *@retrun*/public class MultiDensityUtils { //可自定义参照标准,一套切图 public static final float BASE_WIDTH=1080; //当前手机的缩放比例 private static float scale; public static void init(Context context){ int width = context.getResources().getDisplayMetrics().widthPixels; scale=width/BASE_WIDTH; }//传入根布局,利用了迭代 public static void StartScale(ViewGroup view){ if (view!=null){ if (view.getChildCount()>0){ for (int i = 0; i < view.getChildCount(); i++) { //遍历子view View childView = view.getChildAt(i); if (childView instanceof ViewGroup){ StartScale((ViewGroup) childView); } scaleView(childView); } } scaleView(view); } } private static void scaleView(View view) { if (view instanceof TextView){ float textSize = ((TextView) view).getTextSize(); textSize*=scale; ((TextView) view).setTextSize(0,textSize); if (view.getBackground()!=null){ Drawable drawable = scaleDrawableBounds(((TextView)view).getBackground()); ((TextView)view).setBackgroundDrawable(drawable); } } //将所有的内边距padding缩放 int paddingLeft=getScaledValue(view.getPaddingLeft()); int paddingRight=getScaledValue(view.getPaddingRight()); int paddingBottom = getScaledValue(view.getPaddingBottom()); int paddingTop = getScaledValue(view.getPaddingTop()); view.setPadding(paddingLeft,paddingTop,paddingRight,paddingBottom); //布局参数的缩放 ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); if (layoutParams!=null){ if (layoutParams.width>0){ layoutParams.width= getScaledValue(layoutParams.width); } if (layoutParams.height>0){ layoutParams.height=getScaledValue(layoutParams.height); } if (layoutParams instanceof ViewGroup.MarginLayoutParams){ int leftMargin = getScaledValue(((ViewGroup.MarginLayoutParams) layoutParams).leftMargin); int rightMargin = getScaledValue(((ViewGroup.MarginLayoutParams) layoutParams).rightMargin); int bottomMargin = getScaledValue(((ViewGroup.MarginLayoutParams) layoutParams).bottomMargin); int topMargin = getScaledValue(((ViewGroup.MarginLayoutParams) layoutParams).topMargin); ((ViewGroup.MarginLayoutParams) layoutParams).setMargins(leftMargin,topMargin,rightMargin,bottomMargin); } view.setLayoutParams(layoutParams); } } public static int getScaledValue(int value){ int tempValue= (int) (scale*value); return tempValue; }//针对TextView的background public static Drawable scaleDrawableBounds(Drawable drawable) { int right=getScaledValue(drawable.getIntrinsicWidth()); int bottom=getScaledValue(drawable.getIntrinsicHeight()); drawable.setBounds(0, 0, right, bottom); return drawable; }}
0 0
- 屏幕适配的终结者
- 屏幕适配终结者
- AndroidAutoLayout--屏幕适配终结者
- Android屏幕适配终结者
- Android最便捷的屏幕适配,堪称屏幕适配终结者
- Android最便捷的屏幕适配,堪称屏幕适配终结者
- Linux命令之reset - 终端屏幕混乱的终结者
- Linux reset --终端屏幕混乱的终结者
- Android 适配终结者
- Autolayout_APP适配终结者
- Android AutoLayout 适配终结者
- 终结"AV终结者"
- 虚拟现实:媒体的终结者
- XML的终结者,JSon
- X11的终结者wayland
- Java终结方法的使用(终结守卫者)
- Java终结方法的使用(终结守卫者)
- Android AutoLayout全新的适配方式 堪称适配终结者
- 引用型的函数返回值
- 快速排序处理文件
- OpenCV python 学习笔记(三)
- Windouws7 下提示您使用非管理权限登录,无法创建和修改系统DSN的解决方法
- NumberPicker实现滑动选择
- 屏幕适配的终结者
- 清除Eclipse或MyEclipse中的各种历史记录
- 体系——知能
- 软件测试基础
- jvm垃圾收集小记
- 给RecyclerView加上折叠的效果
- hdu1232 畅通工程 并查集版题
- 走灰不走白,见黑就停下来!什么意思?
- 跳台阶