惠存实用的屏幕计算工具类

原创 2018年04月16日 17:16:17

public class UIUtil {

public static DisplayMetrics getDisplayMetrics(Context context) {
    return context.getResources().getDisplayMetrics();
}

public static int px2sp(Context context, float pxValue) {
    DisplayMetrics displayMetrics = getDisplayMetrics(context);
    return (int) (pxValue / displayMetrics.scaledDensity + 0.5f);
}

public static int sp2px(Context context, float spValue) {
    DisplayMetrics displayMetrics = getDisplayMetrics(context);
    return (int) (spValue * displayMetrics.scaledDensity + 0.5f);
}

public static int dp2px(Context context, float dp) {
    DisplayMetrics displayMetrics = getDisplayMetrics(context);
    return (int) (dp * displayMetrics.density + 0.5);
}

public static int px2dp(Context context, float dp) {
    DisplayMetrics displayMetrics = context.getResources()
            .getDisplayMetrics();
    return (int) (dp / displayMetrics.density + 0.5);
}

/**
 * 获取通知栏高度
 *
 * @Title: getBarHeight
 * @param @param context
 * @param @return 设定文件
 * @return int 返回类型
 */
private static int sStatusBarHeight = 0;

public static int getStatusBarHeight(Context context) {
    if (sStatusBarHeight <= 0) {
        Class<?> c     = null;
        Object   obj   = null;
        Field    field = null;
        int      x     = 0;
        try {
            c = Class.forName("com.android.internal.R$dimen");
            obj = c.newInstance();
            field = c.getField("status_bar_height");
            x = Integer.parseInt(field.get(obj).toString());
            sStatusBarHeight = context.getResources().getDimensionPixelSize(x);
        } catch (Exception e1) {
        }
    }
    return sStatusBarHeight;
}

/**
 * @param root 根视图
 * @param size 字体大小
 */
// 修改整个界面所有控件的字体大小
public static void changeTextSize(ViewGroup root, int size) {
    for (int i = 0; i < root.getChildCount(); i++) {
        View v = root.getChildAt(i);
        if (v instanceof TextView) {
            ((TextView) v).setTextSize(size);
        } else if (v instanceof ViewGroup) {
            changeTextSize((ViewGroup) v, size);
        }
    }
}

public static void measureView(View child) {
    ViewGroup.LayoutParams p = child.getLayoutParams();
    if (p == null) {
        p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
    }
    int childWidthSpec = ViewGroup.getChildMeasureSpec(0, 0 + 0, p.width);
    int lpHeight = p.height;
    int childHeightSpec;
    if (lpHeight > 0) {
        childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight,
                MeasureSpec.EXACTLY);
    } else {
        childHeightSpec = MeasureSpec.makeMeasureSpec(0,
                MeasureSpec.UNSPECIFIED);
    }
    child.measure(childWidthSpec, childHeightSpec);
}

public static boolean isTouchView(View view, MotionEvent event) {
    if (view != null) {
        int[] leftTop = {0, 0};
        view.getLocationInWindow(leftTop);
        int top = leftTop[1], bottom = top + view.getHeight();
        if (event.getY() > top && event.getY() < bottom) {
            return true;
        } else {
            return false;
        }
    }
    return false;
}

/**
 * 5.0以上版本手机动态设置通知栏颜色的方法
 *
 * @param activity 需要设置颜色的Activity
 * @param colorRes 设置的颜色
 */
public static void setStatusBarColor(Activity activity, @ColorRes int colorRes) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        int statusColor = activity.getResources().getColor(colorRes);
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        activity.getWindow().setStatusBarColor(statusColor);
    }
}

public void hiddenView() {
    AnimationSet       animationSet  = new AnimationSet(true);
    TranslateAnimation mHiddenAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f);
    mHiddenAction.setDuration(100);
    mHiddenAction.setFillAfter(true);
    animationSet.addAnimation(mHiddenAction);
}

public void showView() {
    AnimationSet       animationSet = new AnimationSet(true);
    TranslateAnimation mShowAction  = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f);//-1
    mShowAction.setDuration(100);
    mShowAction.setFillAfter(true);
    animationSet.addAnimation(mShowAction);
}

/**
 * 设置视图的偏移量
 * @param v
 * @param left
 * @param top
 * @param right
 * @param bottom
 */
public static void setMargins (View v, int left, int top, int right, int bottom) {
    if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
        ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
        p.setMargins(left, top, right, bottom);
        v.requestLayout();
    }
}

// 成新的颜色值
public static int getNewColorByStartEndColor(Context context, float fraction, int startValue, int endValue) {
    return evaluate(fraction, context.getResources().getColor(startValue), context.getResources().getColor(endValue));
}
/**
 * 成新的颜色值
 * @param fraction 颜色取值的级别 (0.0f ~ 1.0f)
 * @param startValue 开始显示的颜色
 * @param endValue 结束显示的颜色
 * @return 返回生成新的颜色值
 */
public static int evaluate(float fraction, int startValue, int endValue) {
    int startA = (startValue >> 24) & 0xff;
    int startR = (startValue >> 16) & 0xff;
    int startG = (startValue >> 8) & 0xff;
    int startB = startValue & 0xff;

    int endA = (endValue >> 24) & 0xff;
    int endR = (endValue >> 16) & 0xff;
    int endG = (endValue >> 8) & 0xff;
    int endB = endValue & 0xff;

    return ((startA + (int) (fraction * (endA - startA))) << 24) |
            ((startR + (int) (fraction * (endR - startR))) << 16) |
            ((startG + (int) (fraction * (endG - startG))) << 8) |
            ((startB + (int) (fraction * (endB - startB))));
}
// 根据手机的分辨率将dp的单位转成px(像素)
public static int dip2px(Context context, float dpValue) {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int) (dpValue * scale + 0.5f);
}

// 根据手机的分辨率将px(像素)的单位转成dp
public static int px2dip(Context context, float pxValue) {
    final float scale = context.getResources().getDisplayMetrics().density;
    return (int) (pxValue / scale + 0.5f);
}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34942689/article/details/79963404

常用的一些工具类

private HttpSession getSession(){          RequestAttributes ra = RequestContextHolder.getRequestAtt...
  • cbjcry
  • cbjcry
  • 2017年04月13日 10:20
  • 297

Android - 开发常用工具类Utils

Android - 开发常用工具类Utils
  • mythmayor
  • mythmayor
  • 2017年06月02日 12:10
  • 601

Android--获取屏幕高宽度工具类

//获得屏幕相关的辅助类 public class ScreenUtils { private ScreenUtils() { /* cannot be instant...
  • li5685918
  • li5685918
  • 2016年02月26日 15:24
  • 5554

Android开发之关于屏幕的最全工具类

简介Android开发大家应该或多或少的会使用关于屏幕的方法,最近在当前项目中需要大量运用这些方法,便整理了一个全能的工具类。 拥有的方法 获取横竖屏 获取屏幕dpi 获取虚拟按键的高度(在我的项目...
  • u014788453
  • u014788453
  • 2016年08月30日 14:59
  • 770

Android学习之工具类四:屏幕管理工具类

import android.app.KeyguardManager; import android.content.Context; import android.os.PowerManager; ...
  • u012527802
  • u012527802
  • 2017年02月07日 12:54
  • 306

安卓开发中常用的十个工具类

一、网络请求工具类: 最重要的是对http协议的理解,HttpUrlConnection  package com.example.tuhuadmin.fanxinglei.utils; impo...
  • chenrushui
  • chenrushui
  • 2016年08月16日 14:00
  • 2888

Java常用工具类集合

多数是常用的工具类,每个方法都有注释,大家可以从http://code.taobao.org/svn/superutility检出. 贴出部分代码: ...
  • a544328206
  • a544328206
  • 2014年03月24日 10:23
  • 192

各种输入校验工具类

public class CommonUtil { /** * 电话号码验证 * * @param phoneNum * @return */ ...
  • lliuliu18810979455
  • lliuliu18810979455
  • 2016年11月05日 14:58
  • 699

java工具类-计算相对时间的工具类即两个时间的时间差

java相对时间的工具类,此类中有两个暴露的方法,相对于当前时间的方法和相对于某时间的方法。 返回String,如:2小时前/3天2时13秒/昨天...
  • sgyingyin
  • sgyingyin
  • 2016年08月19日 16:38
  • 2610

Java工具类---数字计算工具 NumberUtil

import java.util.HashSet; import java.util.Random; import java.util.Set; /** * * NumberUt...
  • hj7jay
  • hj7jay
  • 2016年04月28日 14:04
  • 2539
收藏助手
不良信息举报
您举报文章:惠存实用的屏幕计算工具类
举报原因:
原因补充:

(最多只允许输入30个字)