屏幕适配的终结者

来源:互联网 发布:如何运用办公软件 编辑:程序博客网 时间: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
原创粉丝点击