package com.ypx.imagepicker.utils; import android.content.Context; import android.graphics.Color; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import java.lang.ref.WeakReference; /** * Description: View尺寸相关工具类 *

* Author: peixing.yang * Date: 2018/12/24-15:40 */ final public class PViewSizeUtils { public static void setViewSize(View view, int width, int height) { WeakReference viewWeakReference = new WeakReference<>(view); if (viewWeakReference.get() != null) { ViewGroup.LayoutParams params = view.getLayoutParams(); if (params == null) { params = new ViewGroup.LayoutParams(width, height); } else { if (width != -1) { params.width = width; } if (height != -1) { params.height = height; } } viewWeakReference.get().setLayoutParams(params); } } public static void setViewSize(View view, int width, float widthHeightRatio) { WeakReference viewWeakReference = new WeakReference<>(view); if (viewWeakReference.get() != null) { ViewGroup.LayoutParams params = view.getLayoutParams(); if (params == null) { params = new ViewGroup.LayoutParams(width, (int) (width / widthHeightRatio)); } else { if (width != -1) { params.width = width; } if (widthHeightRatio != 0) { params.height = (int) (width / widthHeightRatio); } } viewWeakReference.get().setLayoutParams(params); } } public static void setViewSize(View view, int width, int height, int marginLeft, int marginTop, int marginRight, int marginBottom) { WeakReference viewWeakReference = new WeakReference<>(view); if (viewWeakReference.get() != null) { if (viewWeakReference.get().getLayoutParams() != null && (viewWeakReference.get().getLayoutParams() instanceof ViewGroup.MarginLayoutParams)) { ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); params.width = width; params.height = height; if (marginLeft != -1) { params.leftMargin = marginLeft; } if (marginRight != -1) { params.rightMargin = marginRight; } if (marginTop != -1) { params.topMargin = marginTop; } if (marginBottom != -1) { params.bottomMargin = marginBottom; } viewWeakReference.get().setLayoutParams(params); } } } public static void setViewMargin(View view, int margin) { WeakReference viewWeakReference = new WeakReference<>(view); if (viewWeakReference.get() != null) { if (viewWeakReference.get().getLayoutParams() != null && (viewWeakReference.get().getLayoutParams() instanceof ViewGroup.MarginLayoutParams)) { ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); if (margin != -1) { params.leftMargin = margin; params.rightMargin = margin; params.topMargin = margin; params.bottomMargin = margin; } viewWeakReference.get().setLayoutParams(params); } } } /** * 获取View的高度 * * @param v view * @return 高度 */ public static int getViewHeight(View v) { ViewGroup.LayoutParams params = v.getLayoutParams(); if (params != null) { return params.height; } return v.getHeight(); } /** * 获取View的宽度 * * @param v view * @return 宽度 */ public static int getViewWidth(View v) { ViewGroup.LayoutParams params = v.getLayoutParams(); if (params != null) { return params.width; } return v.getWidth(); } public static void setMarginStart(View view, int marginStart) { WeakReference viewWeakReference = new WeakReference<>(view); if (viewWeakReference.get() != null) { ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); if (params != null) { params.leftMargin = marginStart; viewWeakReference.get().setLayoutParams(params); } } } public static void setMarginStartAndEnd(View view, int marginStart, int marginEnd) { WeakReference viewWeakReference = new WeakReference<>(view); if (viewWeakReference.get() != null) { ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); if (params != null) { params.leftMargin = marginStart; params.rightMargin = marginEnd; viewWeakReference.get().setLayoutParams(params); } } } public static void setMarginTopAndBottom(View view, int marginTop, int marginBottom) { WeakReference viewWeakReference = new WeakReference<>(view); if (viewWeakReference.get() != null) { ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); if (params != null) { params.topMargin = marginTop; params.bottomMargin = marginBottom; viewWeakReference.get().setLayoutParams(params); } } } public static void setMarginTop(View view, int marginTop) { WeakReference viewWeakReference = new WeakReference<>(view); if (viewWeakReference.get() != null) { ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); if (params != null) { params.topMargin = marginTop; viewWeakReference.get().setLayoutParams(params); } } } public static int getMarginTop(View view) { WeakReference viewWeakReference = new WeakReference<>(view); if (viewWeakReference.get() != null) { ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); if (params != null) { return params.topMargin; } } return 0; } public static int dp(Context context, float dp) { if (context == null) { return 0; } float density = context.getResources().getDisplayMetrics().density; return (int) (dp * density + 0.5); } public static int sp(Context context, int spValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } /** * 获得屏幕宽度 */ public static int getScreenWidth(Context context) { if (context == null) { return 0; } WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); assert wm != null; wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.widthPixels; } /** * 获得屏幕高度 */ public static int getScreenHeight(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); assert wm != null; wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.heightPixels; } /** * 两个颜色渐变转化 * * @param color1 默认色 * @param color2 目标色 * @param ratio 渐变率(0~1) * @return 计算后的颜色 */ public static int blendColors(int color1, int color2, float ratio) { final float inverseRation = 1f - ratio; float r = (Color.red(color1) * ratio) + (Color.red(color2) * inverseRation); float g = (Color.green(color1) * ratio) + (Color.green(color2) * inverseRation); float b = (Color.blue(color1) * ratio) + (Color.blue(color2) * inverseRation); return Color.rgb((int) r, (int) g, (int) b); } private static long lastTime = 0L; public static boolean onDoubleClick() { boolean flag = false; long time = System.currentTimeMillis() - lastTime; if (time > 300) { flag = true; } lastTime = System.currentTimeMillis(); return !flag; } }