123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package com.reactnativenavigation.utils;
-
- import android.content.Context;
- import android.graphics.PorterDuff;
- import android.graphics.PorterDuffColorFilter;
- import android.graphics.drawable.Drawable;
- import android.os.Build;
- import android.util.DisplayMetrics;
- import android.view.View;
- import android.view.ViewTreeObserver;
- import android.view.WindowManager;
-
- import com.reactnativenavigation.NavigationApplication;
- import com.reactnativenavigation.params.AppStyle;
-
- import java.util.concurrent.atomic.AtomicInteger;
-
- public class ViewUtils {
- private static final AtomicInteger viewId = new AtomicInteger(1);
-
- public static void runOnPreDraw(final View view, final Runnable task) {
- view.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
- @Override
- public boolean onPreDraw() {
- if (!view.getViewTreeObserver().isAlive()) {
- return true;
- }
- view.getViewTreeObserver().removeOnPreDrawListener(this);
- task.run();
- return true;
- }
- });
- }
-
- public static void tintDrawable(Drawable drawable, int tint, boolean enabled) {
- drawable.setColorFilter(new PorterDuffColorFilter(enabled ? tint :
- AppStyle.appStyle.titleBarDisabledButtonColor.getColor(),
- PorterDuff.Mode.SRC_IN));
- }
-
- public static float convertDpToPixel(float dp) {
- float scale = NavigationApplication.instance.getResources().getDisplayMetrics().density;
- return dp * scale + 0.5f;
- }
-
- public static int generateViewId() {
- if (Build.VERSION.SDK_INT >= 17) {
- return View.generateViewId();
- } else {
- return compatGenerateViewId();
- }
- }
-
- public static float getScreenHeight() {
- WindowManager wm = (WindowManager) NavigationApplication.instance.getSystemService(Context.WINDOW_SERVICE);
- DisplayMetrics metrics = new DisplayMetrics();
- wm.getDefaultDisplay().getMetrics(metrics);
- return metrics.heightPixels;
- }
-
- private static int compatGenerateViewId() {
- for (; ; ) {
- final int result = viewId.get();
- // aapt-generated IDs have the high byte nonzero; clamp to the range under that.
- int newValue = result + 1;
- if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0.
- if (viewId.compareAndSet(result, newValue)) {
- return result;
- }
- }
- }
-
- }
-
|