Skip to content

Commit

Permalink
fix(android): add setMetrics to PixelUtil
Browse files Browse the repository at this point in the history
fix(android): add setMetrics to PixelUtil
  • Loading branch information
siguangli2018 authored and zoomchan-cxj committed Jan 18, 2022
1 parent a5a1a4f commit 40af198
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 22 deletions.
Expand Up @@ -19,15 +19,16 @@

public class ContextHolder {

private static Context appContext;
private static Context sAppContext;

public static void initAppContext(Context context) {
if (context != null && appContext == null) {
appContext = context.getApplicationContext();
if (context != null && sAppContext == null) {
sAppContext = context.getApplicationContext();
PixelUtil.initDisplayMetrics(sAppContext);
}
}

public static Context getAppContext() {
return appContext;
return sAppContext;
}
}
Expand Up @@ -175,7 +175,10 @@ public static HippyMap getDimensions(int windowWidth, int windowHeight, Context
return null;
}

DisplayMetrics windowDisplayMetrics = context.getResources().getDisplayMetrics();
DisplayMetrics windowDisplayMetrics = PixelUtil.getMetrics();
if (windowDisplayMetrics == null) {
windowDisplayMetrics = context.getResources().getDisplayMetrics();
}
DisplayMetrics screenDisplayMetrics = new DisplayMetrics();
screenDisplayMetrics.setTo(windowDisplayMetrics);
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Expand Down
Expand Up @@ -15,44 +15,62 @@
*/
package com.tencent.mtt.hippy.utils;

import android.content.Context;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.Display;
import android.view.WindowManager;

@SuppressWarnings({"unused"})
public class PixelUtil {
private static DisplayMetrics sDisplayMetrics = null;

static DisplayMetrics sMetrics = null;

public static void initDisplayMetrics(Context appContext) {
if (appContext == null) {
return;
}

private static DisplayMetrics getMetrics() {
if (sMetrics == null) {
sMetrics = ContextHolder.getAppContext().getResources().getDisplayMetrics();
if (sDisplayMetrics == null) {
sDisplayMetrics = new DisplayMetrics();
WindowManager windowManager = (WindowManager) appContext
.getSystemService(Context.WINDOW_SERVICE);
Display defaultDisplay = windowManager.getDefaultDisplay();
defaultDisplay.getRealMetrics(sDisplayMetrics);
}
return sMetrics;
}

public static DisplayMetrics getMetrics() {
return sDisplayMetrics;
}

/** Set display metrics, call by host app */
@SuppressWarnings("unused")
public static void setDisplayMetrics(DisplayMetrics metrics) {
sDisplayMetrics = metrics;
}

/** Convert from dp to px impl */
public static float dp2px(float value) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, getMetrics());
if (sDisplayMetrics == null) {
return value;
}
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, sDisplayMetrics);
}

/** Convert from dp to px */
public static float dp2px(double value) {
return dp2px((float) value);
}

/** Convert from px to dp */
public static float px2dp(float value) {
return value / getMetrics().density;
}

public static float sp2px(float value) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, value, getMetrics());
}

public static float px2sp(float value) {
return value / getMetrics().scaledDensity;
return value / getDensity();
}

public static float getDensity() {
return getMetrics().density;
if (sDisplayMetrics == null) {
return 1.0f;
}
return sDisplayMetrics.density;
}
}

0 comments on commit 40af198

Please sign in to comment.