Commit c5c9915f by Luosp

导航基本完成,需要细节优化

parent 0d0d6e64
package cn.com.founder.arcgislib.widget.navi;
/**
* 描述距离
*/
public class DistanceBean {
public String distanceValue;
public String distanceUnit;
public DistanceBean(String distanceValue, String distanceUnit) {
this.distanceValue = distanceValue;
this.distanceUnit = distanceUnit;
}
@Override
public String toString() {
return "DistanceBean{" +
"distanceValue='" + distanceValue + '\'' +
", distanceUnit='" + distanceUnit + '\'' +
'}';
}
}
package cn.com.founder.arcgislib.widget.navi;
import com.minedata.minenavi.mapdal.LatLng;
/**
* 矩形类
*/
public class GeoRect {
LatLng pointLB;
LatLng pointRT;
public GeoRect() {
this.pointLB = new LatLng(0, 0);
this.pointRT = new LatLng(0, 0);
}
public GeoRect(LatLng pointLB, LatLng pointRT) {
if (pointLB != null && pointRT != null) {
this.pointLB = pointLB;
this.pointRT = pointRT;
} else {
this.pointLB = new LatLng(0, 0);
this.pointRT = new LatLng(0, 0);
}
}
public GeoRect(double left, double top, double right, double bottom) {
this.pointLB = new LatLng(bottom, left);
this.pointRT = new LatLng(top, right);
}
public GeoRect(GeoRect rect) {
if (rect == null) {
this.pointLB = new LatLng(0, 0);
this.pointRT = new LatLng(0, 0);
} else {
this.pointLB = rect.pointLB;
this.pointRT = rect.pointRT;
}
}
public LatLng getPointLB() {
return this.pointLB;
}
public void setPointLB(LatLng pointLB) {
this.pointLB = pointLB;
}
public LatLng getPointRT() {
return this.pointRT;
}
public void setPointRT(LatLng pointRT) {
this.pointRT = pointRT;
}
public double getLeft() {
return this.pointLB.longitude;
}
public double getRight() {
return this.pointRT.longitude;
}
public double getTop() {
return this.pointRT.latitude;
}
public double getBottom() {
return this.pointLB.latitude;
}
public void setLeft(float left) {
this.pointLB.longitude = left;
}
public void setRight(float right) {
this.pointRT.longitude = right;
}
public void setTop(float top) {
this.pointRT.latitude = top;
}
public void setBottom(float bottom) {
this.pointLB.latitude = bottom;
}
public boolean isIntersect(GeoRect rect) {
return Math.min(this.pointLB.longitude, this.pointRT.longitude)
<= Math.max(rect.pointLB.longitude, rect.pointRT.longitude)
&& Math.min(rect.pointLB.longitude, rect.pointRT.longitude)
<= Math.max(this.pointLB.longitude, this.pointRT.longitude)
&& Math.min(this.pointLB.latitude, this.pointRT.latitude)
<= Math.max(rect.pointLB.latitude, rect.pointRT.latitude)
&& Math.min(rect.pointLB.latitude, rect.pointRT.latitude)
<= Math.max(this.pointLB.latitude, this.pointRT.latitude);
}
public String toString() {
return new String("LB:" + this.pointLB.longitude + "," + this.pointLB.latitude
+ "RT:" + this.pointRT.longitude + "," + this.pointRT.latitude);
}
public boolean contains(GeoRect another) {
return this.pointLB.longitude <= another.pointLB.longitude
&& this.pointRT.longitude >= another.pointRT.longitude
&& this.pointLB.latitude <= another.pointLB.latitude
&& this.pointRT.latitude >= another.pointRT.latitude;
}
public boolean contains(int x, int y) {
return this.pointLB.longitude <= x && this.pointRT.longitude >= x
&& this.pointLB.latitude <= y && this.pointRT.latitude >= y;
}
public boolean intersect(GeoRect another) {
return this.intersect(another.pointLB.longitude, another.pointRT.latitude
, another.pointRT.longitude, another.pointLB.latitude);
}
public boolean intersect(double left, double top, double right, double bottom) {
if (this.intersects(left, top, right, bottom)) {
if (this.pointLB.longitude < left) {
this.pointLB.longitude = left;
}
if (this.pointRT.latitude > top) {
this.pointRT.latitude = top;
}
if (this.pointRT.longitude > right) {
this.pointRT.longitude = right;
}
if (this.pointLB.latitude < bottom) {
this.pointLB.latitude = bottom;
}
return true;
} else {
return false;
}
}
public boolean intersects(double left, double top, double right, double bottom) {
return this.pointLB.longitude < right
&& left < this.pointRT.longitude
&& this.pointRT.latitude > bottom
&& top > this.pointLB.latitude;
}
public static boolean intersects(GeoRect a, GeoRect b) {
return a.pointLB.longitude < b.pointRT.longitude
&& b.pointLB.longitude < a.pointRT.longitude
&& a.pointRT.latitude > b.pointLB.latitude
&& b.pointRT.latitude > a.pointLB.latitude;
}
public void extend(GeoRect another) {
if (another != null) {
if (this.pointLB.longitude > another.pointLB.longitude) {
this.pointLB.longitude = another.pointLB.longitude;
}
if (this.pointRT.longitude < another.pointRT.longitude) {
this.pointRT.longitude = another.pointRT.longitude;
}
if (this.pointLB.latitude > another.pointLB.latitude) {
this.pointLB.latitude = another.pointLB.latitude;
}
if (this.pointRT.latitude < another.pointRT.latitude) {
this.pointRT.latitude = another.pointRT.latitude;
}
}
}
public void extend(LatLng point) {
if (point != null) {
if (this.pointLB.longitude > point.longitude) {
this.pointLB.longitude = point.longitude;
}
if (this.pointRT.longitude < point.longitude) {
this.pointRT.longitude = point.longitude;
}
if (this.pointLB.latitude > point.latitude) {
this.pointLB.latitude = point.latitude;
}
if (this.pointRT.latitude < point.latitude) {
this.pointRT.latitude = point.latitude;
}
}
}
public boolean isEmpty() {
return this.pointLB.longitude >= this.pointRT.longitude || this.pointLB.latitude >= this.pointRT.latitude;
}
public double width() {
return this.pointRT.longitude - this.pointLB.longitude;
}
public double height() {
return this.pointRT.latitude - this.pointLB.longitude;
}
public double centerX() {
return (this.pointLB.longitude + this.pointRT.longitude) / 2;
}
public double centerY() {
return (this.pointLB.latitude + this.pointRT.latitude) / 2;
}
public LatLng center() {
return new LatLng(this.centerY(), this.centerX());
}
public boolean equals(Object o) {
if (o != null && o instanceof GeoRect) {
GeoRect another = (GeoRect) o;
if (this.pointLB.equals(another.pointLB) && this.pointRT.equals(another.pointRT)) {
return true;
}
}
return false;
}
}
package cn.com.founder.arcgislib.widget.navi;
import android.graphics.Point;
import com.minedata.minenavi.mapdal.LatLng;
import com.minedata.minenavi.navi.RouteBase;
import java.util.ArrayList;
import java.util.List;
/**
* 路线路况类
*/
public class JamPath {
public List<LatLng> paths;//路径点集合
public int tmcStatus;//路况状态
public JamPath() {
}
public JamPath(List<LatLng> paths, int tmcStatus) {
this.paths = paths;
this.tmcStatus = tmcStatus;
}
public static List<JamPath> convertRouteBaseToJamPath(RouteBase routeBase) {
List<JamPath> jamPaths = new ArrayList<>();
if (routeBase != null) {
int num = routeBase.getSegmentNumber();
for (int i = 0; i < num; i++) {
JamPath jamPath = new JamPath();
List<LatLng> latLngList = new ArrayList<>();
jamPath.tmcStatus = routeBase.getSegmentTmc(i);
Point[] pointArray = routeBase.getSegmentFinePoints(i);
for (Point point : pointArray) {
LatLng latLng = new LatLng((double) point.y / 100000.0D, (double) point.x / 100000.0D);
latLngList.add(latLng);
}
jamPath.paths = latLngList;
jamPaths.add(jamPath);
}
}
return jamPaths;
}
}
package cn.com.founder.arcgislib.widget.navi;
import android.content.Context;
import android.util.AttributeSet;
import com.minedata.minenavi.navi.JunctionView;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
public class MyJunctionView extends JunctionView {
private OnJunctionViewListener onJunctionViewListener;
public MyJunctionView(Context context) {
super(context);
}
public MyJunctionView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
super.onSurfaceCreated(gl, config);
if (onJunctionViewListener != null) {
onJunctionViewListener.onSurfaceCreated(gl, config);
}
}
public void setOnJunctionViewListener(OnJunctionViewListener listener) {
this.onJunctionViewListener = listener;
}
public interface OnJunctionViewListener {
void onSurfaceCreated(GL10 gl, EGLConfig config);
}
}
package cn.com.founder.arcgislib.widget.navi;
import android.graphics.Color;
/**
* 路线的描画式样
*/
public class RouteDrawStyle {
private int blockedColor, heavyColor, mediumColor, lightColor;//路线颜色
private int blockedColorHighLight, heavyColorHighLight, mediumColorHighLight, lightColorHighLight;//高亮路线颜色
private int blockedOutColor, heavyOutColor, mediumOutColor, lightOutColor;//路线描边
private float width, widthOut;
/**
* 设置模式
*/
public void setRouteDrawStyle(RouteStyleE e) {
switch (e) {
case common:
blockedColor = Color.parseColor("#aa1b1b");//严重拥堵
heavyColor = Color.parseColor("#f8b8b8");//拥堵
mediumColor = Color.parseColor("#f2e2ae");//缓慢
lightColor = Color.parseColor("#ade3c8");//通畅
blockedColorHighLight = Color.parseColor("#aa1b1b");//严重拥堵
heavyColorHighLight = Color.parseColor("#f45656");//拥堵
mediumColorHighLight = Color.parseColor("#ffae00");//缓慢
lightColorHighLight = Color.parseColor("#00be4c");//通畅
blockedOutColor = Color.parseColor("#741111");//描边
heavyOutColor = Color.parseColor("#b23434");
mediumOutColor = Color.parseColor("#c28000");
lightOutColor = Color.parseColor("#237042");
width = 6f;
widthOut = 7f;
break;
case lightNavi:
blockedColor = Color.parseColor("#7f060e");//严重拥堵
heavyColor = Color.parseColor("#c03b37");//拥堵
mediumColor = Color.parseColor("#dea927");//缓慢
lightColor = Color.parseColor("#1fab6c");//通畅
blockedColorHighLight = Color.parseColor("#7f060e");//严重拥堵
heavyColorHighLight = Color.parseColor("#c03b37");//拥堵
mediumColorHighLight = Color.parseColor("#dea927");//缓慢
lightColorHighLight = Color.parseColor("#1fab6c");//通畅
blockedOutColor = Color.parseColor("#531418");//描边
heavyOutColor = Color.parseColor("#492326");
mediumOutColor = Color.parseColor("#a26910");
lightOutColor = Color.parseColor("#026948");
width = 7.5f;
widthOut = 8.5f;
break;
case darkNavi:
blockedColor = Color.parseColor("#aa1b1b");//严重拥堵
heavyColor = Color.parseColor("#f45656");//拥堵
mediumColor = Color.parseColor("#ffae00");//缓慢
lightColor = Color.parseColor("#13c768");//通畅
blockedColorHighLight = Color.parseColor("#aa1b1b");//严重拥堵
heavyColorHighLight = Color.parseColor("#f45656");//拥堵
mediumColorHighLight = Color.parseColor("#ffae00");//缓慢
lightColorHighLight = Color.parseColor("#13c768");//通畅
blockedOutColor = Color.parseColor("#741111");//描边
heavyOutColor = Color.parseColor("#b23434");
mediumOutColor = Color.parseColor("#c28000");
lightOutColor = Color.parseColor("#0d7957");
width = 7.5f;
widthOut = 8.5f;
break;
default:
blockedColor = Color.parseColor("#aa1b1b");//严重拥堵
heavyColor = Color.parseColor("#f45656");//拥堵
mediumColor = Color.parseColor("#ffae00");//缓慢
lightColor = Color.parseColor("#00be4c");//通畅
blockedColorHighLight = Color.parseColor("#aa1b1b");//严重拥堵
heavyColorHighLight = Color.parseColor("#f45656");//拥堵
mediumColorHighLight = Color.parseColor("#ffae00");//缓慢
lightColorHighLight = Color.parseColor("#00be4c");//通畅
blockedOutColor = Color.parseColor("#741111");//描边
heavyOutColor = Color.parseColor("#b23434");
mediumOutColor = Color.parseColor("#c28000");
lightOutColor = Color.parseColor("#237042");
width = 6f;
widthOut = 7f;
break;
}
}
public int getBlockedColorHighLight() {
return blockedColorHighLight;
}
public int getHeavyColorHighLight() {
return heavyColorHighLight;
}
public int getLightColorHighLight() {
return lightColorHighLight;
}
public int getMediumColorHighLight() {
return mediumColorHighLight;
}
public int getBlockedColor() {
return blockedColor;
}
public int getHeavyColor() {
return heavyColor;
}
public int getMediumColor() {
return mediumColor;
}
public int getLightColor() {
return lightColor;
}
public int getBlockedOutColor() {
return blockedOutColor;
}
public int getHeavyOutColor() {
return heavyOutColor;
}
public int getMediumOutColor() {
return mediumOutColor;
}
public int getLightOutColor() {
return lightOutColor;
}
public float getWidth() {
return width;
}
public float getWidthOut() {
return widthOut;
}
public enum RouteStyleE {
common, lightNavi, darkNavi
}
}
package cn.com.founder.arcgislib.widget.navi;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Handler;
import android.provider.Settings;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.DisplayCutout;
import android.view.View;
import android.view.Window;
import android.view.WindowInsets;
import android.view.WindowManager;
import androidx.annotation.RequiresApi;
import com.gyf.immersionbar.BarHide;
import com.gyf.immersionbar.ImmersionBar;
import java.lang.reflect.Method;
import java.util.List;
import cn.com.founder.arcgislib.R;
import static android.content.Context.WINDOW_SERVICE;
/**
* 获取一些屏幕相关的信息
*/
public class ScreenUtil {
private static final String PHONE_FLAG_XIAO_MI = "xiaomi";
private static final String PHONE_FLAG_HUA_WEI = "HUAWEI";
private static final String PHONE_FLAG_OPPO = "oppo";
private static final String PHONE_FLAG_VIVO = "vivo";
public static final int NAVIGATION_BAR_ON_RIGHT = 1;
public static final int NAVIGATION_BAR_ON_LiFT = 3;
private Context mContext;
private Window mWindow;
private WindowManager mWindowManager;
private View statusView;
private int mNavigationBarHeight;
private boolean isUserChangeSystemBrightness = false;
private int mCurrentSystemBrightness = 100;
private DisplayMetrics mDisplayMetrics;
private int mNotchWidth = 0;
private int mNotchHeight = 0;
private int mHorizontalMaxWidth;
public void init(Context context, Window window) {
mContext = context;
mWindow = window;
mWindowManager = (WindowManager) mContext.getSystemService(WINDOW_SERVICE);
mHorizontalMaxWidth = Utils.getInstance().dp2Px(465);
}
private static class SingletonHolder {
public static final ScreenUtil instance = new ScreenUtil();
}
public static ScreenUtil getInstance() {
return SingletonHolder.instance;
}
public int getNotchWidth() {
if (mNotchWidth != 0) {
return mNotchWidth;
}
int notchWidth = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
//小米8升级到MIUI 11后获取的刘海宽度有问题 为676 官方为560,有问题会影响自定义状态栏,为防止其他型号手机升级有问题,以下数据写死
//来源 https://dev.mi.com/console/doc/detail?pId=1341
if (Build.MODEL.equals("MI 8") || Build.MODEL.equals("MI 8 Explorer Edition") || Build.MODEL.equals("MI 8 UD")) {
notchWidth = 560;
} else if (Build.MODEL.equals("MI 8 SE")) {
notchWidth = 540;
} else if (Build.MODEL.equals("MI8Lite")) {
notchWidth = 296;
} else if (Build.MODEL.equals("POCO F1")) {
notchWidth = 588;
} else if (Build.MODEL.equals("Redmi 6 Pro")) {
notchWidth = 352;
} else if (Build.MODEL.equals("Redmi Note 7")) {
notchWidth = 116;
}
if (notchWidth != 0) {
return notchWidth;
}
DisplayCutout displayCutout = getDisplayCutout((Activity) mContext);
if (displayCutout != null) {
List<Rect> boundingRects = displayCutout.getBoundingRects();
if (boundingRects.size() != 0) {
int left = boundingRects.get(0).left;
int screenWidth = getScreenWidth();
if (left > screenWidth / 2) {//刘海描述右边的区域
notchWidth = screenWidth - (screenWidth - left) * 2;
} else {
notchWidth = screenWidth - left * 2;
}
}
}
} else {
if (isXiaoMiPhone()) {
notchWidth = getXiaoMiNotchSize(mContext)[0];
} else if (isHUAWEIPhone()) {
notchWidth = getHuaWeiNotchSize(mContext)[0];
} else if (isOPPOPhone()) {
notchWidth = 324;
} else if (isVivoPhone()) {
notchWidth = Utils.getInstance().dp2Px(100);
}
}
mNotchWidth = notchWidth;
return notchWidth;
}
public int getNotchHeight() {
if (mNotchHeight != 0) {
return mNotchHeight;
}
int notchHeight = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
DisplayCutout displayCutout = getDisplayCutout((Activity) mContext);
if (displayCutout != null) { //通过cutout是否为null判断目前是否开启了刘海屏
List<Rect> boundingRects = displayCutout.getBoundingRects();
if (boundingRects.size() != 0) {
Rect rect = boundingRects.get(0);
notchHeight = rect.height();
//如果刘海的高度大于150,证明是横屏,有问题,取width()
if (notchHeight > 150) {
notchHeight = rect.width();
}
}
} else {
return notchHeight;
}
} else {
if (isXiaoMiPhone()) {
notchHeight = getXiaoMiNotchSize(mContext)[1];
} else if (isHUAWEIPhone()) {
notchHeight = getHuaWeiNotchSize(mContext)[1];
} else if (isOPPOPhone()) {
notchHeight = 80;
} else if (isVivoPhone()) {
notchHeight = Utils.getInstance().dp2Px(32);// 32dp为状态栏高度,刘海高度为27dp
}
}
if (notchHeight == 0) {
notchHeight = getStatusBarHeight();
}
mNotchHeight = notchHeight;
return notchHeight;
}
public int getLiuHaiping() {
if (mNotchHeight != 0) {
return mNotchHeight;
}
int notchHeight = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
DisplayCutout displayCutout = getDisplayCutout((Activity) mContext);
if (displayCutout != null) { //通过cutout是否为null判断目前是否开启了刘海屏
List<Rect> boundingRects = displayCutout.getBoundingRects();
if (boundingRects.size() != 0) {
Rect rect = boundingRects.get(0);
notchHeight = rect.height();
//如果刘海的高度大于150,证明是横屏,有问题,取width()
if (notchHeight > 150) {
notchHeight = rect.width();
}
}
} else {
return notchHeight;
}
} else {
if (isXiaoMiPhone()) {
notchHeight = getXiaoMiNotchSize(mContext)[1];
} else if (isHUAWEIPhone()) {
notchHeight = getHuaWeiNotchSize(mContext)[1];
} else if (isOPPOPhone()) {
notchHeight = 80;
} else if (isVivoPhone()) {
notchHeight = Utils.getInstance().dp2Px(32);// 32dp为状态栏高度,刘海高度为27dp
}
}
return notchHeight;
}
@RequiresApi(api = Build.VERSION_CODES.M)
private DisplayCutout getDisplayCutout(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
View decorView = activity.getWindow().getDecorView();
if (decorView != null) {
WindowInsets windowInsets = decorView.getRootWindowInsets();
if (windowInsets != null) {
return windowInsets.getDisplayCutout();
}
}
}
return null;
}
/**
* 获取状态栏高度
*/
public int getStatusBarHeight() {
int statusBarHeight = 0;
try {
Class<?> clazz = Class.forName("com.android.internal.R$dimen");
Object object = clazz.newInstance();
int height = Integer.parseInt(clazz.getField("status_bar_height").get(object).toString());
statusBarHeight = mContext.getResources().getDimensionPixelSize(height);
} catch (Exception e) {
e.printStackTrace();
}
if (statusBarHeight == 0) {
int resourceId = mContext.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusBarHeight = mContext.getResources().getDimensionPixelSize(resourceId);
}
}
if (statusBarHeight == 0) {
Rect rectangle = new Rect();
mWindow.getDecorView().getWindowVisibleDisplayFrame(rectangle);
statusBarHeight = rectangle.top;
}
return statusBarHeight;
}
/**
* 能否用自定义状态栏
*/
public boolean useCustomStatusBar() {
if (!canUseImmersive()) {
return false;
}
if (isXiaoMiOpenHideFullScreenToggle(mContext)) {
return false;
}
return true;
}
/**
* 获取小米手机刘海屏宽高 int[0] 为宽度 int[1] 为高度
*/
private int[] getXiaoMiNotchSize(Context context) {
int[] ret = new int[]{0, 0};
int resourceWidthId = context.getResources().getIdentifier("notch_width", "dimen", "android");
if (resourceWidthId > 0) {
ret[0] = (context.getResources().getDimensionPixelSize(resourceWidthId)) + 10;
}
int resourceHeightId = context.getResources().getIdentifier("notch_height", "dimen", "android");
if (resourceHeightId > 0) {
ret[1] = context.getResources().getDimensionPixelSize(resourceHeightId) + 30;
}
return ret;
}
/**
* 获取华为手机刘海屏宽高 int[0] 为宽度 int[1] 为高度
*/
private int[] getHuaWeiNotchSize(Context context) {
int[] ret = new int[]{0, 0};
try {
ClassLoader cl = context.getClassLoader();
Class HwNotchSizeUtil = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil");
Method get = HwNotchSizeUtil.getMethod("getNotchSize");
ret = (int[]) get.invoke(HwNotchSizeUtil);
} catch (ClassNotFoundException e) {
Log.e("test", "getNotchSize ClassNotFoundException");
} catch (NoSuchMethodException e) {
Log.e("test", "getNotchSize NoSuchMethodException");
} catch (Exception e) {
Log.e("test", "getNotchSize Exception");
} finally {
return ret;
}
}
public boolean isXiaoMiPhone() {
return Build.MANUFACTURER.equalsIgnoreCase(PHONE_FLAG_XIAO_MI);
}
public boolean isHUAWEIPhone() {
return Build.MANUFACTURER.equalsIgnoreCase(PHONE_FLAG_HUA_WEI);
}
public boolean isOPPOPhone() {
return Build.MANUFACTURER.equalsIgnoreCase(PHONE_FLAG_OPPO);
}
public boolean isVivoPhone() {
return Build.MANUFACTURER.equalsIgnoreCase(PHONE_FLAG_VIVO);
}
/**
* 小米是否开启了隐藏全面屏的开关(系统设置里)
*/
public boolean isXiaoMiOpenHideFullScreenToggle(Context context) {
return ImmersionBar.hasNotchScreen((Activity) context) && isXiaoMiPhone()
&& Settings.Global.getInt(context.getContentResolver(), "force_black", 0) == 1;
}
/**
* 获取当前屏幕的亮度
*
* @param context
* @return 返回是一个int值 在0 ~ 255之间
*/
public int getSystemBrightness(Context context) {
int nowBrightnessValue = 0;
try {
nowBrightnessValue = Settings.System.getInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
} catch (Exception e) {
e.printStackTrace();
}
return nowBrightnessValue;
}
/**
* 设置当前系统屏幕亮度值 0 ~ 255
*
* @param context
* @param paramInt 设置的值
*/
public void setSystemScreenBrightness(Context context, int paramInt) {
try {
Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, paramInt);
} catch (Exception localException) {
localException.printStackTrace();
}
}
/**
* 判断是否开启了自动亮度调节
* 自动 = 1 SCREEN_BRIGHTNESS_MODE_AUTOMATIC
* 手动 = 0 SCREEN_BRIGHTNESS_MODE_MANUAL
*
* @param context
* @return
*/
public boolean isAutoBrightness(Context context) {
boolean isAutoBrightness = false;
try {
isAutoBrightness = Settings.System.getInt(
context.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
} catch (Settings.SettingNotFoundException e) {
e.printStackTrace();
}
return isAutoBrightness;
}
/**
* 改变App当前Window亮度
* lp.screenBrightness 范围 0.0 ~ 1.0之间
*
* @param brightness
* @param context activity的context
*/
public void changeAppBrightness(Context context, float brightness) {
Window window = ((Activity) context).getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
if (brightness == -1) {
lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
} else {
lp.screenBrightness = brightness;
}
window.setAttributes(lp);
}
/**
* 停止自动亮度调节
*
* @param context
*/
public void stopAutoBrightness(Context context) {
Settings.System.putInt(context.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
}
/**
* 开启亮度自动调节
*
* @param context
*/
public void startAutoBrightness(Context context) {
Settings.System.putInt(context.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
}
public void cleanup() {
mContext.getContentResolver().unregisterContentObserver(mBrightnessObserver);
}
/**
* 设置降低屏幕亮度策略
*
* @param enable 是否打开
*/
public void enableScreenBrightnessDarkStrategy(boolean enable) {
if (Utils.getInstance().isCharging() || isAutoBrightness(mContext)) {
return;
}
if (enable) {
isUserChangeSystemBrightness = false;
mCurrentSystemBrightness = getSystemBrightness(mContext);
setSystemScreenBrightness(mContext, mCurrentSystemBrightness / 2);
mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS), false, mBrightnessObserver);
} else {
mContext.getContentResolver().unregisterContentObserver(mBrightnessObserver);
if (!isUserChangeSystemBrightness)
setSystemScreenBrightness(mContext, mCurrentSystemBrightness);
}
}
/**
* 注册光观察者: context.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS), false, mBrightnessObserver);
* 应用销毁解观察者: context.getContentResolver().unregisterContentObserver(mBrightnessObserver);
* 如果开启自动亮度调节,获取系统亮度,是一个值,调节bar,获取系统亮度还是那个值
* 如果关闭自动亮度调节,获取的亮度是一个值,调节bar,获取系统亮度是调节后的值
* 如果开启自动亮度调节,此方法监听不到系统亮度变化
*/
private ContentObserver mBrightnessObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
isUserChangeSystemBrightness = true;
}
};
public Window getWindow() {
return mWindow;
}
/**
* 获取屏幕宽 可用显示区域大小
*/
public int getScreenWidth() {
mDisplayMetrics = new DisplayMetrics();
mWindowManager.getDefaultDisplay().getMetrics(mDisplayMetrics);
return mDisplayMetrics.widthPixels;
}
public int getScreenHeight() {
mDisplayMetrics = new DisplayMetrics();
mWindowManager.getDefaultDisplay().getMetrics(mDisplayMetrics);
return mDisplayMetrics.heightPixels;
}
/**
* 获取横向屏幕可用显示区域最大宽度
*/
public int getHorizontalMaxWidth() {
int screenWidthTwoFifths = getScreenWidth() * 2 / 5;
if (screenWidthTwoFifths > mHorizontalMaxWidth) {
return mHorizontalMaxWidth;
} else {
return screenWidthTwoFifths;
}
}
/**
* 地图显示的高,获取的是正常竖屏的高
*/
public int getMapShowHeight() {
int mapShowHeight;
if (canUseImmersive()) {
mapShowHeight = getRealScreenHeight() - getNavigationBarHeight();
} else {
mapShowHeight = getRealScreenHeight() - getNavigationBarHeight() - getStatusBarHeight();
}
return mapShowHeight;
}
/**
* 通过反射拿到屏幕实际的高度(包括状态栏和导航栏),获取的是正常竖屏的高
*/
private int getRealScreenHeight() {
int dpi = 0;
Display display = ((Activity) mContext).getWindowManager().getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
@SuppressWarnings("rawtypes")
Class c;
try {
c = Class.forName("android.view.Display");
@SuppressWarnings("unchecked")
Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
method.invoke(display, dm);
if (isScreenLandscape()) {
dpi = dm.widthPixels;
} else {
dpi = dm.heightPixels;
}
} catch (Exception e) {
e.printStackTrace();
}
if (dpi == 0) {
if (isScreenLandscape()) {
dpi = getScreenWidth();
} else {
if (ImmersionBar.hasNotchScreen((Activity) mContext)) {
dpi = getAvailableScreenHeight() + getNotchHeight() + getNavigationBarHeight();
} else {
dpi = getAvailableScreenHeight() + getStatusBarHeight() + getNavigationBarHeight();
}
}
}
return dpi;
}
/**
* 计算屏幕可用高度(此方法会受到软键盘 状态栏 底部导航栏的影响,不适合view自绘中调用,性能会有损耗)
* rect的top 是指 如果状态栏显示 则top值是状态栏高度 如果不显示则为0
* rect的bottom 是指 如果底部导航栏显示 bottom是屏幕的高度减去导航栏的高度 如果底部导航栏不显示 bottom的值是屏幕高度
*/
private int horizontalAvailableScreenHeight, verticalAvailableScreenHeight;
private int getAvailableScreenHeight() {
if (isScreenLandscape()) {
if (horizontalAvailableScreenHeight == 0) {
Rect rect = new Rect();
mWindow.getDecorView().getWindowVisibleDisplayFrame(rect);
horizontalAvailableScreenHeight = rect.right - rect.left;
}
return horizontalAvailableScreenHeight;
} else {
if (verticalAvailableScreenHeight == 0) {
Rect rect = new Rect();
mWindow.getDecorView().getWindowVisibleDisplayFrame(rect);
verticalAvailableScreenHeight = rect.bottom - rect.top;
}
return verticalAvailableScreenHeight;
}
}
/**
* 设置是否全屏
*/
public void enableFullScreen(boolean enable) {
if (ImmersionBar.hasNotchScreen((Activity) mContext)) {
setStatusBarVisible(!enable);
} else {
if (enable) {
ImmersionBar.with((Activity) mContext)
.hideBar(BarHide.FLAG_HIDE_STATUS_BAR)
.init();
} else {
ImmersionBar.with((Activity) mContext)
.hideBar(BarHide.FLAG_SHOW_BAR)
.init();
}
}
}
/**
* 设置状态栏是否可见
*/
private void setStatusBarVisible(boolean show) {
int uiFlags;
if (show) {
uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
uiFlags |= 0x00001000;
} else {
uiFlags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_FULLSCREEN;
uiFlags |= 0x00001000;
}
mWindow.getDecorView().setSystemUiVisibility(uiFlags);
}
/**
* 获取导航栏虚拟按键的高度,如果虚拟按键隐藏就返回0,否则返回虚拟按键的高度
*/
public int getNavigationBarHeight() {
if (isNavigationBarShow()) {
return calculateNavigationBarHeight();
} else {
mNavigationBarHeight = 0;
return mNavigationBarHeight;
}
}
/**
* 获取忽略导航栏隐藏来获取导航栏的高,即算导航栏显示时候的高
*/
public int getNavigationBarHeightIgnoreHide() {
if (mNavigationBarHeight != 0) {
return mNavigationBarHeight;
} else {
return calculateNavigationBarHeight();
}
}
/**
* 计算虚拟按键的高度
*/
private int calculateNavigationBarHeight() {
if (mNavigationBarHeight == 0) {
try {
Class<?> clazz = Class.forName("com.android.internal.R$dimen");
Object object = clazz.newInstance();
int height = Integer.parseInt(clazz.getField("navigation_bar_height").get(object).toString());
mNavigationBarHeight = mContext.getResources().getDimensionPixelSize(height);
} catch (Exception e) {
e.printStackTrace();
}
}
if (mNavigationBarHeight == 0) {
Resources res = mContext.getResources();
int resourceId = res.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
mNavigationBarHeight = res.getDimensionPixelSize(resourceId);
}
}
if (mNavigationBarHeight == 0) {
Rect rect = new Rect();
mWindow.getDecorView().getWindowVisibleDisplayFrame(rect);
Point realSize = new Point();
mWindowManager.getDefaultDisplay().getRealSize(realSize);
mNavigationBarHeight = realSize.y - rect.bottom;
}
return mNavigationBarHeight;
}
/**
* 是否保持屏幕常亮
*
* @param enable true为保持常亮
*/
public void enableKeepScreenOn(boolean enable) {
if (enable) {
mWindow.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
} else {
mWindow.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
public void setNotchShowContent(boolean isShow) {
setNotchShowContent(mWindow, isShow);
}
/**
* 设置刘海区是否显示内容
*
* @param window 当前显示的window
* @param isShow 刘海区域是否显示内容,如果false即刘海区域变黑,不显示内容
*/
public void setNotchShowContent(Window window, boolean isShow) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
if (isShow) {
WindowManager.LayoutParams lp = window.getAttributes();
lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
window.setAttributes(lp);
} else {
WindowManager.LayoutParams lp = window.getAttributes();
lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER;
window.setAttributes(lp);
}
}
}
/**
* 判断虚拟导航栏是否显示
*
* @return true(显示虚拟导航栏),false(不显示或不支持虚拟导航栏)
*/
private boolean isNavigationBarShow() {
//判断小米手机是否开启了全面屏,开启了,直接返回false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
if (Settings.Global.getInt(mContext.getContentResolver(), "force_fsg_nav_bar", 0) != 0) {
return false;
}
}
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR1 || isHUAWEIPhone()) {
int screenRealHeight = getRealScreenHeight();
int statusBarHeight = getStatusBarHeight();
int screenAvailableHeight = getAvailableScreenHeight();
return screenAvailableHeight + statusBarHeight < screenRealHeight;
} else {
//其他手机根据屏幕真实高度与显示高度是否相同来判断
Display d = mWindowManager.getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
d.getRealMetrics(realDisplayMetrics);
}
int realHeight = realDisplayMetrics.heightPixels;
int realWidth = realDisplayMetrics.widthPixels;
DisplayMetrics displayMetrics = new DisplayMetrics();
d.getMetrics(displayMetrics);
int displayHeight = displayMetrics.heightPixels;
int displayWidth = displayMetrics.widthPixels;
return (realWidth - displayWidth) > 0 || (realHeight - displayHeight) > 0;
}
}
/**
* 判断手机是否使用了沉浸式
*
* @return true 表示使用了 false表示没使用
*/
public boolean canUseImmersive() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
}
/**
* 判断当前屏幕方向是否为横屏
*
* @param context 当前需要判断是否是横屏的Activity的Context
* @return true 横屏 false 竖屏
*/
public boolean isScreenLandscape(Context context) {
Configuration mConfiguration = context.getResources().getConfiguration(); //获取设置的配置信息
int ori = mConfiguration.orientation; //获取屏幕方向
return ori == Configuration.ORIENTATION_LANDSCAPE;
}
/**
* 判断当前屏幕横屏方向
*/
public int horizontalDirection() {
return ((Activity) mContext).getWindowManager().getDefaultDisplay().getRotation();
}
/**
* 判断当前屏幕方向是否为横屏,注意 此方法适用于关于MainActivity的横竖屏判断
*
* @return true 横屏 false 竖屏
*/
public boolean isScreenLandscape() {
return isScreenLandscape(mContext);
}
public int getDimen10Px() {
return mContext.getResources().getDimensionPixelOffset(R.dimen.nz_px_10);
}
public int getDimen20Px() {
return mContext.getResources().getDimensionPixelOffset(R.dimen.nz_px_20);
}
//主页面底部抽拉菜单适配刘海屏
public int getAdaptationLiuHaipingHeigh() {
if (getLiuHaiping() == 0) {
return mContext.getResources().getDimensionPixelSize(R.dimen.nz_px_56);
}
return getLiuHaiping();
}
private Drawable mShadowDrawable;
private Rect mDrawablePadding;
public Rect getShadowBgRect(int drawableResId) {
mShadowDrawable = mContext.getResources().getDrawable(drawableResId);
mDrawablePadding = new Rect();
mShadowDrawable.getPadding(mDrawablePadding);
return mDrawablePadding;
}
}
\ No newline at end of file
package cn.com.founder.arcgislib.widget.navi;
import android.content.Context;
import android.graphics.Typeface;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SpannableBuilder {
private Context context;
private List<SpanWrapper> list;
private SpannableBuilder(Context context) {
this.context = context;
this.list = new ArrayList<>();
}
public SpannableBuilder append(String text, int textSize, int textColor) {
return append(text, textSize, textColor, false);
}
public SpannableBuilder append(String text, int textSize, int textColor, boolean isBold) {
list.add(new SpanWrapper(text, textSize, textColor, isBold));
return this;
}
public Spannable build() {
SpannableStringBuilder textSpan = new SpannableStringBuilder();
int start = 0;
int end = 0;
for (int i = 0; i < list.size(); i++) {
SpanWrapper wrapper = list.get(i);
String text = wrapper.getText();
start = end;
end = end + text.length();
textSpan.append(text);
AbsoluteSizeSpan sizeSpan = new AbsoluteSizeSpan(getContext().getResources().getDimensionPixelSize(wrapper.getTextSize()));
ForegroundColorSpan colorSpan = new ForegroundColorSpan(getContext().getResources().getColor(wrapper.getTextColor()));
if (wrapper.isBold) {
textSpan.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
textSpan.setSpan(sizeSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textSpan.setSpan(colorSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return textSpan;
}
public static SpannableBuilder create(Context context) {
return new SpannableBuilder(context);
}
public Context getContext() {
return context;
}
private class SpanWrapper {
String text;
int textSize;
int textColor;
boolean isBold;
public SpanWrapper(String text, int textSize, int textColor, boolean isBold) {
this.text = text;
this.textSize = textSize;
this.textColor = textColor;
this.isBold = isBold;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public int getTextSize() {
return textSize;
}
public void setTextSize(int textSize) {
this.textSize = textSize;
}
public int getTextColor() {
return textColor;
}
public void setTextColor(int textColor) {
this.textColor = textColor;
}
public boolean isBold() {
return isBold;
}
public void setBold(boolean bold) {
isBold = bold;
}
}
public static SpannableString matcherSearchText(int color, String text, String keyword) {
SpannableString ss = new SpannableString(text);
Pattern pattern = Pattern.compile(keyword);
Matcher matcher = pattern.matcher(ss);
while (matcher.find()) {
int start = matcher.start();
int end = matcher.end();
ss.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return ss;
}
/**
* 高亮显示关键字
*
* @param text 文本
* @param keyword 关键字
* @param color 关键字高亮颜色
*/
public static SpannableString highlightKeyword(CharSequence text, String keyword, int color) {
return highlightKeyword(text, keyword, color, true);
}
/**
* 高亮显示关键字
*
* @param text 文本
* @param keyword 关键字
* @param color 关键字高亮颜色
* @param caseInsensitive 是否忽略大小写
*/
public static SpannableString highlightKeyword(CharSequence text, String keyword, int color, boolean caseInsensitive) {
SpannableString ss = new SpannableString(text);
// 转换后可以把特殊符号变成普通字符串,防止正则表达式出现问题
keyword = Pattern.quote(keyword);
Pattern pattern = caseInsensitive ? Pattern.compile(keyword, Pattern.CASE_INSENSITIVE) : Pattern.compile(keyword);
Matcher matcher = pattern.matcher(ss);
while (matcher.find()) {
int start = matcher.start();
int end = matcher.end();
ss.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
}
return ss;
}
public void clear() {
list.clear();
}
}
package cn.com.founder.arcgislib.widget.navi;
/**
* 描述时间
*/
public class TimeBean {
public int hour;
public int minute;
public TimeBean(int hour, int minute) {
this.hour = hour;
this.minute = minute;
}
@Override
public String toString() {
return "TimeBean{" +
"hour=" + hour +
", minute=" + minute +
'}';
}
}
package cn.com.founder.arcgislib.widget.navi;
/**
* 路况类
*/
public class TmcStatus {
public static final int TMC_STATUS_UNKNOWN = 0;
public static final int TMC_STATUS_FREE = 1;
public static final int TMC_STATUS_SLOW = 2;
public static final int TMC_STATUS_HEAVY = 3;
public static final int TMC_STATUS_BLOCK = 4;
public static final int TMC_STATUS_NONE = 5;
private TmcStatus() {
}
}
\ No newline at end of file
/*********************************************************************************************************************************
* NaviCore Corporate MIT License 0.1
* Copyright (c) 2019 GIS Core R&D Department, NavInfo Corp.
*
* Permission is hereby granted, free of charge, to any entity within the corporation(Entity) obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software without restriction, including without
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit Entities to whom the Software is furnished to do so, subject to the following conditions:
*
* 1. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. and
* 2. The above copyright notice, this permission notice and the acknowledgments below shall be displayed in UI or web pages
* if the Software is redistributed in binary form or as web service.
*
* Acknowledgments: "This work uses NaviZeroAndroid provided by GIS Core R&D Department, NavInfo Corp."
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* You may also get a copy of the license at http://navicore.cn/license/NC_MIT_0.1
**********************************************************************************************************************************/
package cn.com.founder.arcgislib.widget.navi;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.media.AudioManager;
import android.os.BatteryManager;
import android.os.Build;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.StatFs;
import android.text.TextUtils;
import android.util.Base64;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.TranslateAnimation;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.Toast;
import com.minedata.minenavi.SDKInitializer;
import com.minedata.minenavi.map.MineMap;
import com.minedata.minenavi.mapdal.DistanceStringInfo;
import com.minedata.minenavi.mapdal.MineNaviUtil;
import com.minedata.minenavi.mapdal.NativeEnv;
import java.io.BufferedReader;
import java.io.FileReader;
import java.security.MessageDigest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
public class Utils {
private Context mContext;
private AudioManager mAudioManager;
private PackageManager mPackageManager;
private float mDpiFactor = 2.0f;
private boolean mIsInited = false;
private Timer mTimer;
private Context mApplicationContext;
private CountDownTimer mCountDownTimer;
private static class SingletonHolder {
public static final Utils instance = new Utils();
}
public static Utils getInstance() {
return SingletonHolder.instance;
}
public void init(Context context) {
if (mIsInited) {
return;
}
mContext = context;
mApplicationContext = context.getApplicationContext();
mTimer = new Timer();
mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
mPackageManager = mContext.getPackageManager();
mDpiFactor = context.getResources().getDisplayMetrics().density;
mIsInited = true;
}
/**
* 获取当前音量值
*/
public int getCurrentVolume() {
return mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
}
/**
* 获取音量最大值
*/
public int getMaxVolume() {
return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
}
/**
* 设置当前的音量
*/
public void setVolume(int volumeValue) {
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volumeValue, AudioManager.FLAG_PLAY_SOUND);//设置值为Val
}
/**
* APP是否处于前台
*/
public boolean isAppOnForeground() {
ActivityManager activityManager = (ActivityManager) mContext.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
String packageName = mContext.getApplicationContext().getPackageName();
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager
.getRunningAppProcesses();
if (appProcesses == null)
return false;
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals(packageName)
&& appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
return false;
}
/**
* 判断设备是否正在充电
*/
public boolean isCharging() {
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = mContext.registerReceiver(null, ifilter);
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
return isCharging;
}
/**
* 获取屏幕的高,如果横屏的话,返回的高就是屏幕的宽,如果是竖屏的话,返回的高就是屏幕的高,获取的高是从状态栏到导航栏整体的高
*
* @param activity 当前的activity
* @return 屏幕的高
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public int getWindowHeight(Activity activity) {
Point realSize = new Point();
activity.getWindowManager().getDefaultDisplay().getRealSize(realSize);
return realSize.y;
}
/**
* 获取屏幕的高,如果横屏的话,返回的高就是屏幕的宽,如果是竖屏的话,返回的高就是屏幕的高,获取的高是从状态栏到导航栏整体的高
*
* @param activity 当前的activity
* @return 屏幕的高
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public int getWindowWidth(Activity activity) {
Point realSize = new Point();
activity.getWindowManager().getDefaultDisplay().getRealSize(realSize);
return realSize.x;
}
/**
* 平移动画
*/
private TranslateAnimation mTranslateAnimation;
public void translateAnimation(View view, float fromX, float toX, float fromY, float toY, long duration, Animation.AnimationListener animationListener,
boolean isFillAfter) {
mTranslateAnimation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, fromX, Animation.RELATIVE_TO_SELF, toX,
Animation.RELATIVE_TO_SELF, fromY, Animation.RELATIVE_TO_SELF, toY);
mTranslateAnimation.setDuration(duration);
mTranslateAnimation.setFillAfter(isFillAfter);
if (animationListener != null) {
mTranslateAnimation.setAnimationListener(animationListener);
}
view.startAnimation(mTranslateAnimation);
}
/**
* 混合动画动画
*/
public void translateAnimationWithAbsolute(View view, float fromAlpha, float toAlpha, long alaphDuration, long startTime, float fromX, float toX, float fromY, float toY,
long translateDuration, long animationSetDuration, Animation.AnimationListener animationListener,
boolean isFillAfter) {
//途径点1——————————添加文字移动平移动画 333
AnimationSet animationSet = new AnimationSet(true);
AlphaAnimation animationa = new AlphaAnimation(fromAlpha, toAlpha);
animationa.setDuration(alaphDuration);
animationa.setStartTime(startTime);
animationSet.addAnimation(animationa);
TranslateAnimation translateAnimation = new TranslateAnimation(Animation.ABSOLUTE, fromX, Animation.ABSOLUTE, toX, Animation.ABSOLUTE,
fromY, Animation.ABSOLUTE, toY);
translateAnimation.setDuration(translateDuration);
animationSet.addAnimation(translateAnimation);
animationSet.setDuration(animationSetDuration);
animationSet.setAnimationListener(animationListener);
animationSet.setFillAfter(isFillAfter);
view.startAnimation(animationSet);
}
public boolean isTranslateAnimationHasEnded() {
if (mTranslateAnimation == null) {
return true;
}
return mTranslateAnimation.hasEnded();
}
/**
* 地图是否是2d模式
*/
public final boolean isMap2dStyle(MineMap mineMap) {
return mineMap.getElevation() == 90;
}
/**
* 地图是否是3d模式
*/
public final boolean isMap3dStyle(MineMap mineMap) {
return mineMap.getElevation() != 90;
}
/**
* 延时操作
*
* @param runnable
* @param delayed
*/
private Handler delayedViewOperateHandler = new Handler();
public void doDelayedViewOperate(Runnable runnable, long delayed) {
delayedViewOperateHandler.postDelayed(runnable, delayed);
}
public Handler getDelayedViewOperateHandler() {
return delayedViewOperateHandler;
}
public void cleanup() {
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
}
/**
* 秒转换成分钟,向上取整
*
* @param secondTime 秒
* @return 取整后的分钟
*/
public final int second2Minute(int secondTime) {
return (secondTime + 59) / 60;
}
/**
* 将以秒为单位的时间格式化
*
* @param secondTime 秒
* @return 得到格式化的时间
*/
public String formatTime(int secondTime) {
String sTotalTime;
int minutes = second2Minute(secondTime);
if (minutes < 60) {
sTotalTime = minutes + "分钟";
} else {
int remainMin = minutes % 60;
sTotalTime = minutes / 60 + "小时" + (remainMin == 0 ? "" : remainMin + "分");
}
return sTotalTime;
}
/**
* 格式化到千米,如果距离不小于100km或整千米,保留整数;否则保留小数点后一位,比如 110000 -> 110,8000 -> 8, 8001 -> 8, 800 -> 0.8, 99 -> 0
*
* @param distance 距离,单位:米
* @return 格式化后以千米表示的结果,不包含单位
*/
public String formatDistanceToKm(int distance) {
String distanceValue;
if (distance >= 100000 || distance % 1000 == 0) {
distanceValue = String.valueOf(distance / 1000);
} else {
distanceValue = String.format(Locale.getDefault(), "%.1f", (distance / 100) / 10.0);
}
return distanceValue;
}
public DistanceBean formatDistance(int distance, boolean isEnglishDistanceUnit) {
DistanceStringInfo distanceStringInfo = MineNaviUtil.distance2String(distance, isEnglishDistanceUnit ? MineNaviUtil.DistanceUnit.english : MineNaviUtil.DistanceUnit.normal, false);
String distanceValue = "";
String distanceUnit = "";
switch (distanceStringInfo.unit) {
case MineNaviUtil.GisUnit.m:
distanceUnit = isEnglishDistanceUnit ? "m" : "米";
break;
case MineNaviUtil.GisUnit.km:
distanceUnit = isEnglishDistanceUnit ? "km" : "公里";
break;
case MineNaviUtil.GisUnit.mi:
distanceUnit = isEnglishDistanceUnit ? "mile" : "英里";
break;
case MineNaviUtil.GisUnit.ft:
distanceUnit = isEnglishDistanceUnit ? "ft" : "英尺";
break;
}
distanceValue = distanceStringInfo.distanceString.split(distanceUnit)[0];
return new DistanceBean(distanceValue, distanceUnit);
}
public TimeBean calcTimeBean(int time) {
int totalMinute = (time + 59) / 60;
int timeHour = totalMinute / 60;
int timeMinute = totalMinute % 60;
return new TimeBean(timeHour, timeMinute);
}
/**
* 弹出/隐藏键盘
*/
public void enableInputMethod(boolean enable, EditText editText) {
InputMethodManager inputManager = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
if (enable) {
//弹出键盘
inputManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
} else {
//隐藏键盘
inputManager.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
}
/**
* 弹出/隐藏键盘 : 防止焦点丢失
*/
public void enableInputMethodWithFocus(boolean enable, EditText editText) {
InputMethodManager inputManager = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
editText.setFocusable(enable);
editText.setFocusableInTouchMode(enable);
editText.requestFocus();
if (enable) {
//弹出键盘
editText.requestFocus();
inputManager.showSoftInput(editText, 0);
} else {
//隐藏键盘
inputManager.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
}
/**
* 光标移到文字后
*/
public void setSelectionEnd(EditText editText) {
if (editText != null) {
String b = editText.getText().toString();
editText.setSelection(b.length());
}
}
/**
* 无焦点情况下隐藏键盘
*/
public void hideKeyboard(Context context) {
Activity activity = (Activity) context;
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
View v = activity.getWindow().peekDecorView();
if (null != v) {
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
public String getStrDistance(Point point1, Point point2) {
int distance = MineNaviUtil.distance(point1, point2);
return MineNaviUtil.distance2String(distance, MineNaviUtil.DistanceUnit.normal, false).distanceString;
}
public int dp2Px(float dp) {
return (int) (dp * mDpiFactor + 0.5f);
}
public int px2Dp(int px) {
return (int) (px / mDpiFactor + 0.5f);
}
/**
* 判断系统当前是24小时制还是 12小时制
*/
public boolean is24Hour() {
return android.text.format.DateFormat.is24HourFormat(mContext);
}
/**
* 将流量大小(B)格式化为显示文本,规则如下:<br>
* 1. 小于1K时,显示xxB,例如2B<br>
* 2. 小于1M时,显示xxKB,例如250KB<br>
* 3. 小于1G时,显示xxMB,例如250MB<br>
* 4. 不小于1G时,显示xx.xGB,例如1.0GB, 10.5GB
*
* @param size 流量大小,单位:字节
*/
public String formatTrafficDataSize(long size) {
if (size < 1024) {
return size + "B";
} else if (size < 1024 * 1024) {
return size / 1024 + "KB";
} else if (size < 10 * 1024 * 1024) {
return String.format("%.1fM", size / (1024.0 * 1024));
} else if (size < 1024L * 1024 * 1024) {
return size / (1024 * 1024) + "MB";
} else {
return String.format("%.1fGB", size / (1024.0 * 1024 * 1024));
}
}
/**
* 获取版本号名字
*/
public String getVerName() {
String verName = "";
try {
verName = mPackageManager.getPackageInfo(mApplicationContext.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return verName;
}
/**
* 获取版本号
*/
public int getVersionCode() {
int versionCode = 0;
try {
versionCode = mPackageManager.getPackageInfo(mApplicationContext.getPackageName(), 0).versionCode;
} catch (Exception e) {
e.printStackTrace();
}
return versionCode;
}
/**
* 获取app名字
*/
public String getAppName() {
String appName = "";
try {
PackageInfo packageInfo = mPackageManager.getPackageInfo(mApplicationContext.getPackageName(), 0);
appName = packageInfo.applicationInfo.loadLabel(mPackageManager).toString();
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return appName;
}
/**
* 全角转半角
*
* @return 半角字符串
*/
public String toDBC(String input) {
char c[] = input.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == '\u3000') {
c[i] = ' ';
} else if (c[i] > '\uFF00' && c[i] < '\uFF5F') {
c[i] = (char) (c[i] - 65248);
}
}
return new String(c);
}
/**
* 系统Toast
*/
public void showToast(Context context, String msg) {
Toast toast = Toast.makeText(context, msg, Toast.LENGTH_SHORT);
toast.setText(msg);
toast.show();
}
public void scheduleTimerTask(TimerTask timerTask, long time) {
if (mTimer != null && timerTask != null) {
mTimer.schedule(timerTask, time);
}
}
/**
* 软件运行环境是否是手机
*
* @return
*/
public boolean isMobilePhone() {
try {
if (ScreenUtil.getInstance().isScreenLandscape() && getTotalRam(mContext) <= 2.0f
&& getSdcardAvailableSize(SDKInitializer.getAppPath()) < (25L * 1024 * 1024 * 1024)) {
return false;
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
/**
* 根据包名获取当前数据存储的路径后缀
*/
public String getCurrentStoragePathSuffix() {
String suffix = "";
if (isTestVersion()) {
suffix = "/mapbar/NaviZero";
} else if (isReleaseVersion()) {
suffix = "/mapbar/NaviZeroRelease";
}
return suffix;
}
public boolean isTestVersion() {
String packageName = mContext.getPackageName();
return TextUtils.equals("com.mapbar.navigation.zero", packageName);
}
public boolean isReleaseVersion() {
String packageName = mContext.getPackageName();
return TextUtils.equals("com.mapbar.navigation.zero.release", packageName);
}
public String getLoginAppName() {
return isTestVersion() ? "naviZeroBeta" : "naviZeroRelease";
}
/**
* 获取SD卡大小
*
* @param sdcardPath
* @return
*/
public long getSdcardAvailableSize(String sdcardPath) {
long size = 0;
StatFs statFs = new StatFs(sdcardPath);
int blockSize = statFs.getBlockSize();
int totalBlocks = statFs.getBlockCount();
size = (long) totalBlocks * blockSize;
return size;
}
public float getTotalRam(Context context) {
String path = "/proc/meminfo";
String firstLine = null;
float totalRam = 0;
try {
FileReader fileReader = new FileReader(path);
BufferedReader br = new BufferedReader(fileReader, 8192);
firstLine = br.readLine().split("\\s+")[1];
br.close();
} catch (Exception e) {
e.printStackTrace();
}
if (firstLine != null) {
totalRam = Float.valueOf(firstLine) / (1024 * 1024);
}
return totalRam;
}
public Bitmap createCircleBitmap(Bitmap resource) {
//获取图片的宽度
int width = resource.getWidth();
Paint paint = new Paint();
//设置抗锯齿
paint.setAntiAlias(true);
//创建一个与原bitmap一样宽度的正方形bitmap
Bitmap circleBitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888);
//以该bitmap为低创建一块画布
Canvas canvas = new Canvas(circleBitmap);
//以(width/2, width/2)为圆心,width/2为半径画一个圆
canvas.drawCircle(width / 2, width / 2, width / 2, paint);
//设置画笔为取交集模式
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
//裁剪图片
canvas.drawBitmap(resource, 0, 0, paint);
return circleBitmap;
}
private SimpleDateFormat mSimpleDateFormat;
/**
* local时间转换成UTC时间
*
* @param date 时间格式 例: 2019-5-21 14:12:38
* @return 返回格式化好的时间 例: 2019-5-21 22:12:38
*/
public String formatLocalDate(String date) {
if (mSimpleDateFormat == null) {
mSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
Date localDate = null;
try {
localDate = mSimpleDateFormat.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
long localTimeInMillis = localDate.getTime() + 60 * 60 * 8 * 1000;
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(localTimeInMillis);
return mSimpleDateFormat.format(calendar.getTime());
}
/**
* /**
* 使用SHA1算法对字符串进行加密
*
* @param str 要签名的字符串
* @return SHA1 签名后的内容
*/
public static String sha1Digest(String str) {
if (str == null || str.length() == 0) {
return null;
}
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f'};
try {
MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
mdTemp.update(str.getBytes("UTF-8"));
byte[] md = mdTemp.digest();
int j = md.length;
char buf[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
buf[k++] = hexDigits[byte0 & 0xf];
}
return new String(buf);
} catch (Exception e) {
return null;
}
}
/**
* 随机字符串
*
* @return 随机字符串
*/
public static String randomString() {
String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 10; i++) {
int number = random.nextInt(str.length());
char charAt = str.charAt(number);
sb.append(charAt);
}
return sb.toString();
}
/**
* 开启横竖屏模式
*
* @param activity 需要开启横竖屏的activity
* @param isOpen 是否打开
*/
public void enableHorizontalAndVerticalScreenMode(Activity activity, boolean isOpen) {
activity.setRequestedOrientation(isOpen ? ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
/**
* 开启横竖屏模式
*
* @param isOpen 是否打开
*/
public void enableHorizontalAndVerticalScreenMode(boolean isOpen) {
enableHorizontalAndVerticalScreenMode((Activity) mContext, isOpen);
}
/**
* 是否有网络连接
*
* @return
*/
public boolean isHaveNetwork() {
int netWorkState = NativeEnv.getNetworkStatus(mContext);
if (netWorkState == NativeEnv.NetworkStatus.unavailable) {
return false;
}
return true;
}
public boolean isNumber(String str) {
for (int i = str.length(); --i >= 0; ) {
int chr = str.charAt(i);
if (chr < 48 || chr > 57)
return false;
}
return true;
}
/***
* MD5加密
*/
public static String string2MD5(String inStr) {
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
return "";
}
byte[] md5Bytes = md5.digest(inStr.getBytes());
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16)
hexValue.append("0");
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString().toUpperCase();
}
public static String base64(String str) {
return Base64.encodeToString(str.getBytes(), Base64.DEFAULT);
}
public static String location2String(Point pt) {
return String.format("%.5f,%.5f", pt.x / 100000.0, pt.y / 100000.0);
}
public static Point string2Location(String str) {
try {
String[] parts = str.split(",");
return new Point((int) (Float.valueOf(parts[0]) * 100000), (int) (Float.valueOf(parts[1]) * 100000));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FF34A42B"/>
<corners android:radius="@dimen/nz_px_4"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="10dip"
/>
<solid android:color="@color/colorHalfTrans"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_navingInfoTopBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/naving_view_corner_bg"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/ll_corner_detail"
android:layout_width="@dimen/nz_px_300"
android:layout_height="260dp"
android:orientation="vertical">
<com.minedata.minenavi.navi.TurnIconView
android:id="@+id/turnIconView"
android:layout_width="@dimen/nz_px_220"
android:layout_height="@dimen/nz_px_220"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="@dimen/nz_px_20"
android:layout_marginTop="@dimen/nz_px_20"
android:layout_marginRight="@dimen/nz_px_20"
android:layout_marginBottom="@dimen/nz_px_20" />
<TextView
android:id="@+id/tv_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/nz_px_30"
android:layout_marginBottom="@dimen/nz_px_10"
android:gravity="center"
android:textColor="#ffffff"
android:textSize="@dimen/nz_px_36"
android:textStyle="bold" />
<LinearLayout
android:id="@+id/ll_timeDistance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_residualTimeDistance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="#ffffff"
android:textSize="@dimen/nz_px_36"
android:textStyle="bold" />
<ImageView
android:id="@+id/iv_bottomTrafficLight"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/nz_px_6"
android:src="@drawable/signal_light_horizontal" />
<TextView
android:id="@+id/tv_trafficLightNumber"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/nz_px_6"
android:gravity="center"
android:textColor="#ffffff"
android:textSize="@dimen/nz_px_36"
android:textStyle="bold" />
</LinearLayout>
<TextView
android:id="@+id/tv_arriveTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/nz_px_30"
android:cursorVisible="true"
android:gravity="center"
android:textColor="#ffffff"
android:textSize="@dimen/nz_px_36"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_details"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/nz_px_20"
android:layout_weight="1000"
android:gravity="center_vertical"
android:orientation="vertical">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_turnDistance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:textSize="24sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_turnAction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/tv_turnDistance"
android:layout_marginStart="@dimen/nz_px_14"
android:layout_toRightOf="@id/tv_turnDistance"
android:singleLine="true"
android:textColor="@color/navingViewLinkUpInfoColor"
android:textSize="@dimen/nz_px_36"
android:textStyle="bold" />
</RelativeLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_guidanceIcon"
android:layout_width="@dimen/nz_px_40"
android:layout_height="@dimen/nz_px_40"
android:layout_marginRight="@dimen/nz_px_20"
android:src="@drawable/navi_launcher"
android:visibility="gone" />
<TextView
android:id="@+id/tv_naving_exit_port"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginEnd="@dimen/nz_px_10"
android:background="@drawable/naving_exit_port_bg"
android:gravity="center"
android:paddingLeft="@dimen/nz_px_5"
android:paddingRight="@dimen/nz_px_5"
android:singleLine="true"
android:text="出口"
android:textColor="#ffffff"
android:textSize="@dimen/nz_px_35"
android:visibility="gone" />
<TextView
android:id="@+id/tv_turnRoadName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:textSize="@dimen/nz_px_40" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_junctionViewDecorView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/naving_view_corner_bg"
android:orientation="vertical"
android:gravity="bottom">
<LinearLayout
android:id="@+id/navigation_top_half_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="@dimen/nz_px_40"
android:paddingRight="@dimen/nz_px_40"
android:paddingBottom="@dimen/nz_px_20">
<TextView
android:id="@+id/tv_turnDistanceInJunctionView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="100米"
android:textColor="#ffffff"
android:textSize="@dimen/nz_px_60"
android:textStyle="bold"/>
<com.minedata.minenavi.navi.TurnIconView
android:id="@+id/turnIconViewInJunctionView"
android:layout_width="@dimen/nz_px_80"
android:layout_height="@dimen/nz_px_80"
android:layout_marginLeft="@dimen/nz_px_10"
android:layout_marginRight="@dimen/nz_px_10"/>
<TextView
android:id="@+id/tv_turnActionInJunctionView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="前往"
android:textColor="@color/navingViewLinkUpInfoColor"
android:textSize="@dimen/nz_px_30"
android:textStyle="bold"/>
<TextView
android:id="@+id/tv_turnRoadNameInJunctionView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="北清路"
android:layout_marginStart="@dimen/nz_px_14"
android:textColor="#ffffff"
android:textSize="@dimen/nz_px_40"
android:textStyle="bold"/>
</LinearLayout>
</LinearLayout>
<RelativeLayout
android:id="@+id/rl_junctionViewContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/WrapContent.WidthMatchParent">
<include
android:id="@+id/ll_navi_information"
layout="@layout/layout_navi_board"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_margin="@dimen/nz_px_20"
android:visibility="gone" />
<include
android:id="@+id/ll_junctionViewDecorView"
layout="@layout/layout_navi_junction"
android:layout_width="match_parent"
android:layout_height="260dp"
android:layout_margin="@dimen/nz_px_20"
android:visibility="invisible" />
<!-- 车道线 -->
<com.minedata.minenavi.navi.LaneView
android:id="@+id/naviLandBand"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/ll_junctionViewDecorView"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:translationZ="3dp" />
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="title_bar_height">50dip</dimen>
<dimen name="side_dialog">85dip</dimen>
<dimen name="margin_left_right">10dip</dimen>
<dimen name="margin_top">10dip</dimen>
<dimen name="margin_top_es">5dip</dimen>
<dimen name="text_reversion">14dip</dimen>
<dimen name="filter_text_padding">5dip</dimen>
<dimen name="calendar_day_headers_paddingbottom">4dp</dimen>
<dimen name="calendar_month_topmargin">16dp</dimen>
<dimen name="calendar_month_title_bottommargin">4dp</dimen>
<dimen name="calendar_text_medium">18sp</dimen>
<dimen name="calendar_text_small">14sp</dimen>
<dimen name="text_width">125dp</dimen>
<dimen name="actionbar_vertival_padding">8dp</dimen>
<!-- 字体大小 -->
<dimen name="h1">8sp</dimen>
<dimen name="h2">9sp</dimen>
<dimen name="h3">10sp</dimen>
<dimen name="h4">11sp</dimen>
<dimen name="h5">12sp</dimen>
<dimen name="h6">13sp</dimen>
<dimen name="h7">14sp</dimen>
<dimen name="h8">15sp</dimen>
<dimen name="h9">16sp</dimen>
<dimen name="h10">17sp</dimen>
<dimen name="h11">18sp</dimen>
<dimen name="h12">19sp</dimen>
<dimen name="h13">20sp</dimen>
<dimen name="h14">21sp</dimen>
<dimen name="px8">5dp</dimen>
<dimen name="px10">6dp</dimen>
<dimen name="px12">7dp</dimen>
<dimen name="px14">8dp</dimen>
<dimen name="px16">9dp</dimen>
<dimen name="px18">10dp</dimen>
<dimen name="px20">11dp</dimen>
<dimen name="px22">12dp</dimen>
<dimen name="px24">14dp</dimen>
<dimen name="px26">15dp</dimen>
<dimen name="px28">16dp</dimen>
<dimen name="px30">17dp</dimen>
<dimen name="px32">18dp</dimen>
<dimen name="px34">19dp</dimen>
<dimen name="px36">20dp</dimen>
<dimen name="px38">21dp</dimen>
<dimen name="px40">23dp</dimen>
<dimen name="px42">24dp</dimen>
<dimen name="px44">25dp</dimen>
<dimen name="px46">26dp</dimen>
<dimen name="px48">27dp</dimen>
<dimen name="px50">28dp</dimen>
<dimen name="px52">29dp</dimen>
<dimen name="px54">30dp</dimen>
<dimen name="px56">32dp</dimen>
<dimen name="px58">33dp</dimen>
<dimen name="px60">34dp</dimen>
<dimen name="px62">35dp</dimen>
<dimen name="px64">36dp</dimen>
<dimen name="px66">37dp</dimen>
<dimen name="px68">38dp</dimen>
<dimen name="px70">39dp</dimen>
<dimen name="px72">41dp</dimen>
<dimen name="px74">42dp</dimen>
<dimen name="px76">43dp</dimen>
<dimen name="px78">44dp</dimen>
<dimen name="px80">45dp</dimen>
<dimen name="px82">46dp</dimen>
<dimen name="px84">47dp</dimen>
<dimen name="px86">48dp</dimen>
<dimen name="px88">50dp</dimen>
<dimen name="px90">51dp</dimen>
<dimen name="px92">52dp</dimen>
<dimen name="px94">53dp</dimen>
<dimen name="px96">54dp</dimen>
<dimen name="px98">55dp</dimen>
<dimen name="px100">56dp</dimen>
<dimen name="px102">57dp</dimen>
<dimen name="px104">59dp</dimen>
<dimen name="px106">60dp</dimen>
<dimen name="px108">61dp</dimen>
<dimen name="px110">62dp</dimen>
<dimen name="px112">63dp</dimen>
<dimen name="px114">64dp</dimen>
<dimen name="px116">65dp</dimen>
<dimen name="px118">66dp</dimen>
<dimen name="px120">68dp</dimen>
<dimen name="px122">69dp</dimen>
<dimen name="px124">70dp</dimen>
<dimen name="px126">71dp</dimen>
<dimen name="px128">72dp</dimen>
<dimen name="px130">73dp</dimen>
<dimen name="px132">74dp</dimen>
<dimen name="px134">75dp</dimen>
<dimen name="px136">77dp</dimen>
<dimen name="px138">78dp</dimen>
<dimen name="px140">79dp</dimen>
<dimen name="px142">80dp</dimen>
<dimen name="px144">81dp</dimen>
<dimen name="px146">82dp</dimen>
<dimen name="px148">83dp</dimen>
<dimen name="px150">84dp</dimen>
<dimen name="px152">86dp</dimen>
<dimen name="px154">87dp</dimen>
<dimen name="px156">88dp</dimen>
<dimen name="px158">89dp</dimen>
<dimen name="px160">90dp</dimen>
<dimen name="px162">91dp</dimen>
<dimen name="px164">92dp</dimen>
<dimen name="px166">93dp</dimen>
<dimen name="px168">95dp</dimen>
<dimen name="px170">96dp</dimen>
<dimen name="px172">97dp</dimen>
<dimen name="px174">98dp</dimen>
<dimen name="px176">99dp</dimen>
<dimen name="px178">100dp</dimen>
<dimen name="px180">101dp</dimen>
<dimen name="px182">102dp</dimen>
<dimen name="px184">104dp</dimen>
<dimen name="px186">105dp</dimen>
<dimen name="px188">106dp</dimen>
<dimen name="px190">107dp</dimen>
<dimen name="px192">108dp</dimen>
<dimen name="px194">109dp</dimen>
<dimen name="px196">110dp</dimen>
<dimen name="px198">111dp</dimen>
<dimen name="px200">113dp</dimen>
<dimen name="px202">114dp</dimen>
<dimen name="px204">115dp</dimen>
<dimen name="px206">116dp</dimen>
<dimen name="px208">117dp</dimen>
<dimen name="px210">118dp</dimen>
<dimen name="px212">119dp</dimen>
<dimen name="px214">120dp</dimen>
<dimen name="px216">122dp</dimen>
<dimen name="px218">123dp</dimen>
<dimen name="px220">124dp</dimen>
<dimen name="px222">125dp</dimen>
<dimen name="px224">126dp</dimen>
<dimen name="px226">127dp</dimen>
<dimen name="px228">128dp</dimen>
<dimen name="px230">129dp</dimen>
<dimen name="px232">131dp</dimen>
<dimen name="px234">132dp</dimen>
<dimen name="px236">133dp</dimen>
<dimen name="px238">134dp</dimen>
<dimen name="px240">135dp</dimen>
<dimen name="px242">136dp</dimen>
<dimen name="px244">137dp</dimen>
<dimen name="px246">138dp</dimen>
<dimen name="px248">140dp</dimen>
<dimen name="px250">141dp</dimen>
<dimen name="px252">142dp</dimen>
<dimen name="px254">143dp</dimen>
<dimen name="px256">144dp</dimen>
<dimen name="px258">145dp</dimen>
<dimen name="px260">146dp</dimen>
<dimen name="px262">147dp</dimen>
<dimen name="px264">149dp</dimen>
<dimen name="px266">150dp</dimen>
<dimen name="px268">151dp</dimen>
<dimen name="px270">152dp</dimen>
<dimen name="px272">153dp</dimen>
<dimen name="px274">154dp</dimen>
<dimen name="px276">155dp</dimen>
<dimen name="px278">156dp</dimen>
<dimen name="px280">158dp</dimen>
<dimen name="px282">159dp</dimen>
<dimen name="px284">160dp</dimen>
<dimen name="px286">161dp</dimen>
<dimen name="px288">162dp</dimen>
<dimen name="px290">163dp</dimen>
<dimen name="px292">164dp</dimen>
<dimen name="px294">165dp</dimen>
<dimen name="px296">167dp</dimen>
<dimen name="px298">168dp</dimen>
<dimen name="px300">169dp</dimen>
<dimen name="px302">170dp</dimen>
<dimen name="px304">171dp</dimen>
<dimen name="px306">172dp</dimen>
<dimen name="px308">173dp</dimen>
<dimen name="px310">174dp</dimen>
<dimen name="px312">176dp</dimen>
<dimen name="px314">177dp</dimen>
<dimen name="px316">178dp</dimen>
<dimen name="px318">179dp</dimen>
<dimen name="px320">180dp</dimen>
<dimen name="px322">181dp</dimen>
<dimen name="px324">182dp</dimen>
<dimen name="px326">183dp</dimen>
<dimen name="px328">185dp</dimen>
<dimen name="px330">186dp</dimen>
<dimen name="px332">187dp</dimen>
<dimen name="px334">188dp</dimen>
<dimen name="px336">189dp</dimen>
<dimen name="px338">190dp</dimen>
<dimen name="px340">191dp</dimen>
<dimen name="px342">192dp</dimen>
<dimen name="px344">194dp</dimen>
<dimen name="px346">195dp</dimen>
<dimen name="px348">196dp</dimen>
<dimen name="px350">197dp</dimen>
<dimen name="px352">198dp</dimen>
<dimen name="px354">199dp</dimen>
<dimen name="px356">200dp</dimen>
<dimen name="px358">201dp</dimen>
<dimen name="px360">203dp</dimen>
<dimen name="px362">204dp</dimen>
<dimen name="px364">205dp</dimen>
<dimen name="px366">206dp</dimen>
<dimen name="px368">207dp</dimen>
<dimen name="px370">208dp</dimen>
<dimen name="px372">209dp</dimen>
<dimen name="px374">210dp</dimen>
<dimen name="px376">212dp</dimen>
<dimen name="px378">213dp</dimen>
<dimen name="px380">214dp</dimen>
<dimen name="px382">215dp</dimen>
<dimen name="px384">216dp</dimen>
<dimen name="px386">217dp</dimen>
<dimen name="px388">218dp</dimen>
<dimen name="px390">219dp</dimen>
<dimen name="px392">221dp</dimen>
<dimen name="px394">222dp</dimen>
<dimen name="px396">223dp</dimen>
<dimen name="px398">224dp</dimen>
<dimen name="px400">225dp</dimen>
<dimen name="px402">226dp</dimen>
<dimen name="px404">227dp</dimen>
<dimen name="px406">228dp</dimen>
<dimen name="px408">230dp</dimen>
<dimen name="px410">231dp</dimen>
<dimen name="px412">232dp</dimen>
<dimen name="px414">233dp</dimen>
<dimen name="px416">234dp</dimen>
<dimen name="px418">235dp</dimen>
<dimen name="px420">236dp</dimen>
<dimen name="px422">237dp</dimen>
<dimen name="px424">239dp</dimen>
<dimen name="px426">240dp</dimen>
<dimen name="px428">241dp</dimen>
<dimen name="px430">242dp</dimen>
<dimen name="px432">243dp</dimen>
<dimen name="px434">244dp</dimen>
<dimen name="px436">245dp</dimen>
<dimen name="px438">246dp</dimen>
<dimen name="px440">248dp</dimen>
<dimen name="px442">249dp</dimen>
<dimen name="px444">250dp</dimen>
<dimen name="px446">251dp</dimen>
<dimen name="px448">252dp</dimen>
<dimen name="px450">253dp</dimen>
<dimen name="px452">254dp</dimen>
<dimen name="px454">255dp</dimen>
<dimen name="px456">257dp</dimen>
<dimen name="px458">258dp</dimen>
<dimen name="px460">259dp</dimen>
<dimen name="px462">260dp</dimen>
<dimen name="px464">261dp</dimen>
<dimen name="px466">262dp</dimen>
<dimen name="px468">263dp</dimen>
<dimen name="px470">264dp</dimen>
<dimen name="px472">266dp</dimen>
<dimen name="px474">267dp</dimen>
<dimen name="px476">268dp</dimen>
<dimen name="px478">269dp</dimen>
<dimen name="px480">270dp</dimen>
<dimen name="px482">271dp</dimen>
<dimen name="px484">272dp</dimen>
<dimen name="px486">273dp</dimen>
<dimen name="px488">275dp</dimen>
<dimen name="px490">276dp</dimen>
<dimen name="px492">277dp</dimen>
<dimen name="px494">278dp</dimen>
<dimen name="px496">279dp</dimen>
<dimen name="px498">280dp</dimen>
<dimen name="px500">281dp</dimen>
<dimen name="px502">282dp</dimen>
<dimen name="px504">284dp</dimen>
<dimen name="px506">285dp</dimen>
<dimen name="px508">286dp</dimen>
<dimen name="px510">287dp</dimen>
<dimen name="px512">288dp</dimen>
<dimen name="px514">289dp</dimen>
<dimen name="px516">290dp</dimen>
<dimen name="px518">291dp</dimen>
<dimen name="px520">293dp</dimen>
<dimen name="px522">294dp</dimen>
<dimen name="px524">295dp</dimen>
<dimen name="px526">296dp</dimen>
<dimen name="px528">297dp</dimen>
<dimen name="px530">298dp</dimen>
<dimen name="px532">299dp</dimen>
<dimen name="px534">300dp</dimen>
<dimen name="px536">302dp</dimen>
<dimen name="px538">303dp</dimen>
<dimen name="px540">304dp</dimen>
<dimen name="px542">305dp</dimen>
<dimen name="px544">306dp</dimen>
<dimen name="px546">307dp</dimen>
<dimen name="px548">308dp</dimen>
<dimen name="px550">309dp</dimen>
<dimen name="px552">311dp</dimen>
<dimen name="px554">312dp</dimen>
<dimen name="px556">313dp</dimen>
<dimen name="px558">314dp</dimen>
<dimen name="px560">315dp</dimen>
<dimen name="px562">316dp</dimen>
<dimen name="px564">317dp</dimen>
<dimen name="px566">318dp</dimen>
<dimen name="px568">320dp</dimen>
<dimen name="px570">321dp</dimen>
<dimen name="px572">322dp</dimen>
<dimen name="px574">323dp</dimen>
<dimen name="px576">324dp</dimen>
<dimen name="px578">325dp</dimen>
<dimen name="px580">326dp</dimen>
<dimen name="px582">327dp</dimen>
<dimen name="px584">329dp</dimen>
<dimen name="px586">330dp</dimen>
<dimen name="px588">331dp</dimen>
<dimen name="px590">332dp</dimen>
<dimen name="px592">333dp</dimen>
<dimen name="px594">334dp</dimen>
<dimen name="px596">335dp</dimen>
<dimen name="px598">336dp</dimen>
<dimen name="px600">338dp</dimen>
<dimen name="px602">339dp</dimen>
<dimen name="px604">340dp</dimen>
<dimen name="px606">341dp</dimen>
<dimen name="px608">342dp</dimen>
<dimen name="px610">343dp</dimen>
<dimen name="px612">344dp</dimen>
<dimen name="px614">345dp</dimen>
<dimen name="px616">347dp</dimen>
<dimen name="px618">348dp</dimen>
<dimen name="px620">349dp</dimen>
<dimen name="px622">350dp</dimen>
<dimen name="px624">351dp</dimen>
<dimen name="px626">352dp</dimen>
<dimen name="px628">353dp</dimen>
<dimen name="px630">354dp</dimen>
<dimen name="px632">356dp</dimen>
<dimen name="px634">357dp</dimen>
<dimen name="px636">358dp</dimen>
<dimen name="px638">359dp</dimen>
<dimen name="px640">360dp</dimen>
<dimen name="base_dpi">360dp</dimen>
<dimen name="nz_px_0">0.00dp</dimen>
<dimen name="nz_px_1">0.48dp</dimen>
<dimen name="nz_px_2">0.96dp</dimen>
<dimen name="nz_px_3">1.44dp</dimen>
<dimen name="nz_px_4">1.92dp</dimen>
<dimen name="nz_px_5">2.40dp</dimen>
<dimen name="nz_px_6">2.88dp</dimen>
<dimen name="nz_px_7">3.36dp</dimen>
<dimen name="nz_px_8">3.84dp</dimen>
<dimen name="nz_px_9">4.32dp</dimen>
<dimen name="nz_px_10">4.80dp</dimen>
<dimen name="nz_px_11">5.28dp</dimen>
<dimen name="nz_px_12">5.76dp</dimen>
<dimen name="nz_px_13">6.24dp</dimen>
<dimen name="nz_px_14">6.72dp</dimen>
<dimen name="nz_px_15">7.20dp</dimen>
<dimen name="nz_px_16">7.68dp</dimen>
<dimen name="nz_px_17">8.16dp</dimen>
<dimen name="nz_px_18">8.64dp</dimen>
<dimen name="nz_px_19">9.12dp</dimen>
<dimen name="nz_px_20">9.60dp</dimen>
<dimen name="nz_px_21">10.08dp</dimen>
<dimen name="nz_px_22">10.56dp</dimen>
<dimen name="nz_px_23">11.04dp</dimen>
<dimen name="nz_px_24">11.52dp</dimen>
<dimen name="nz_px_25">12.00dp</dimen>
<dimen name="nz_px_26">12.48dp</dimen>
<dimen name="nz_px_27">12.96dp</dimen>
<dimen name="nz_px_28">13.44dp</dimen>
<dimen name="nz_px_29">13.92dp</dimen>
<dimen name="nz_px_30">14.40dp</dimen>
<dimen name="nz_px_31">14.88dp</dimen>
<dimen name="nz_px_32">15.36dp</dimen>
<dimen name="nz_px_33">15.84dp</dimen>
<dimen name="nz_px_34">16.32dp</dimen>
<dimen name="nz_px_35">16.80dp</dimen>
<dimen name="nz_px_36">17.28dp</dimen>
<dimen name="nz_px_37">17.76dp</dimen>
<dimen name="nz_px_38">18.24dp</dimen>
<dimen name="nz_px_39">18.72dp</dimen>
<dimen name="nz_px_40">19.20dp</dimen>
<dimen name="nz_px_41">19.68dp</dimen>
<dimen name="nz_px_42">20.16dp</dimen>
<dimen name="nz_px_43">20.64dp</dimen>
<dimen name="nz_px_44">21.12dp</dimen>
<dimen name="nz_px_45">21.60dp</dimen>
<dimen name="nz_px_46">22.08dp</dimen>
<dimen name="nz_px_47">22.56dp</dimen>
<dimen name="nz_px_48">23.04dp</dimen>
<dimen name="nz_px_49">23.52dp</dimen>
<dimen name="nz_px_50">24.00dp</dimen>
<dimen name="nz_px_51">24.48dp</dimen>
<dimen name="nz_px_52">24.96dp</dimen>
<dimen name="nz_px_53">25.44dp</dimen>
<dimen name="nz_px_54">25.92dp</dimen>
<dimen name="nz_px_55">26.40dp</dimen>
<dimen name="nz_px_56">26.88dp</dimen>
<dimen name="nz_px_57">27.36dp</dimen>
<dimen name="nz_px_58">27.84dp</dimen>
<dimen name="nz_px_59">28.32dp</dimen>
<dimen name="nz_px_60">28.80dp</dimen>
<dimen name="nz_px_61">29.28dp</dimen>
<dimen name="nz_px_62">29.76dp</dimen>
<dimen name="nz_px_63">30.24dp</dimen>
<dimen name="nz_px_64">30.72dp</dimen>
<dimen name="nz_px_65">31.20dp</dimen>
<dimen name="nz_px_66">31.68dp</dimen>
<dimen name="nz_px_67">32.16dp</dimen>
<dimen name="nz_px_68">32.64dp</dimen>
<dimen name="nz_px_69">33.12dp</dimen>
<dimen name="nz_px_70">33.60dp</dimen>
<dimen name="nz_px_71">34.08dp</dimen>
<dimen name="nz_px_72">34.56dp</dimen>
<dimen name="nz_px_73">35.04dp</dimen>
<dimen name="nz_px_74">35.52dp</dimen>
<dimen name="nz_px_75">36.00dp</dimen>
<dimen name="nz_px_76">36.48dp</dimen>
<dimen name="nz_px_77">36.96dp</dimen>
<dimen name="nz_px_78">37.44dp</dimen>
<dimen name="nz_px_79">37.92dp</dimen>
<dimen name="nz_px_80">38.40dp</dimen>
<dimen name="nz_px_81">38.88dp</dimen>
<dimen name="nz_px_82">39.36dp</dimen>
<dimen name="nz_px_83">39.84dp</dimen>
<dimen name="nz_px_84">40.32dp</dimen>
<dimen name="nz_px_85">40.80dp</dimen>
<dimen name="nz_px_86">41.28dp</dimen>
<dimen name="nz_px_87">41.76dp</dimen>
<dimen name="nz_px_88">42.24dp</dimen>
<dimen name="nz_px_89">42.72dp</dimen>
<dimen name="nz_px_90">43.20dp</dimen>
<dimen name="nz_px_91">43.68dp</dimen>
<dimen name="nz_px_92">44.16dp</dimen>
<dimen name="nz_px_93">44.64dp</dimen>
<dimen name="nz_px_94">45.12dp</dimen>
<dimen name="nz_px_95">45.60dp</dimen>
<dimen name="nz_px_96">46.08dp</dimen>
<dimen name="nz_px_97">46.56dp</dimen>
<dimen name="nz_px_98">47.04dp</dimen>
<dimen name="nz_px_99">47.52dp</dimen>
<dimen name="nz_px_100">48.00dp</dimen>
<dimen name="nz_px_101">48.48dp</dimen>
<dimen name="nz_px_102">48.96dp</dimen>
<dimen name="nz_px_103">49.44dp</dimen>
<dimen name="nz_px_104">49.92dp</dimen>
<dimen name="nz_px_105">50.40dp</dimen>
<dimen name="nz_px_106">50.88dp</dimen>
<dimen name="nz_px_107">51.36dp</dimen>
<dimen name="nz_px_108">51.84dp</dimen>
<dimen name="nz_px_109">52.32dp</dimen>
<dimen name="nz_px_110">52.80dp</dimen>
<dimen name="nz_px_111">53.28dp</dimen>
<dimen name="nz_px_112">53.76dp</dimen>
<dimen name="nz_px_113">54.24dp</dimen>
<dimen name="nz_px_114">54.72dp</dimen>
<dimen name="nz_px_115">55.20dp</dimen>
<dimen name="nz_px_116">55.68dp</dimen>
<dimen name="nz_px_117">56.16dp</dimen>
<dimen name="nz_px_118">56.64dp</dimen>
<dimen name="nz_px_119">57.12dp</dimen>
<dimen name="nz_px_120">57.60dp</dimen>
<dimen name="nz_px_121">58.08dp</dimen>
<dimen name="nz_px_122">58.56dp</dimen>
<dimen name="nz_px_123">59.04dp</dimen>
<dimen name="nz_px_124">59.52dp</dimen>
<dimen name="nz_px_125">60.00dp</dimen>
<dimen name="nz_px_126">60.48dp</dimen>
<dimen name="nz_px_127">60.96dp</dimen>
<dimen name="nz_px_128">61.44dp</dimen>
<dimen name="nz_px_129">61.92dp</dimen>
<dimen name="nz_px_130">62.40dp</dimen>
<dimen name="nz_px_131">62.88dp</dimen>
<dimen name="nz_px_132">63.36dp</dimen>
<dimen name="nz_px_133">63.84dp</dimen>
<dimen name="nz_px_134">64.32dp</dimen>
<dimen name="nz_px_135">64.80dp</dimen>
<dimen name="nz_px_136">65.28dp</dimen>
<dimen name="nz_px_137">65.76dp</dimen>
<dimen name="nz_px_138">66.24dp</dimen>
<dimen name="nz_px_139">66.72dp</dimen>
<dimen name="nz_px_140">67.20dp</dimen>
<dimen name="nz_px_141">67.68dp</dimen>
<dimen name="nz_px_142">68.16dp</dimen>
<dimen name="nz_px_143">68.64dp</dimen>
<dimen name="nz_px_144">69.12dp</dimen>
<dimen name="nz_px_145">69.60dp</dimen>
<dimen name="nz_px_146">70.08dp</dimen>
<dimen name="nz_px_147">70.56dp</dimen>
<dimen name="nz_px_148">71.04dp</dimen>
<dimen name="nz_px_149">71.52dp</dimen>
<dimen name="nz_px_150">72.00dp</dimen>
<dimen name="nz_px_151">72.48dp</dimen>
<dimen name="nz_px_152">72.96dp</dimen>
<dimen name="nz_px_153">73.44dp</dimen>
<dimen name="nz_px_154">73.92dp</dimen>
<dimen name="nz_px_155">74.40dp</dimen>
<dimen name="nz_px_156">74.88dp</dimen>
<dimen name="nz_px_157">75.36dp</dimen>
<dimen name="nz_px_158">75.84dp</dimen>
<dimen name="nz_px_159">76.32dp</dimen>
<dimen name="nz_px_160">76.80dp</dimen>
<dimen name="nz_px_161">77.28dp</dimen>
<dimen name="nz_px_162">77.76dp</dimen>
<dimen name="nz_px_163">78.24dp</dimen>
<dimen name="nz_px_164">78.72dp</dimen>
<dimen name="nz_px_165">79.20dp</dimen>
<dimen name="nz_px_166">79.68dp</dimen>
<dimen name="nz_px_167">80.16dp</dimen>
<dimen name="nz_px_168">80.64dp</dimen>
<dimen name="nz_px_169">81.12dp</dimen>
<dimen name="nz_px_170">81.60dp</dimen>
<dimen name="nz_px_171">82.08dp</dimen>
<dimen name="nz_px_172">82.56dp</dimen>
<dimen name="nz_px_173">83.04dp</dimen>
<dimen name="nz_px_174">83.52dp</dimen>
<dimen name="nz_px_175">84.00dp</dimen>
<dimen name="nz_px_176">84.48dp</dimen>
<dimen name="nz_px_177">84.96dp</dimen>
<dimen name="nz_px_178">85.44dp</dimen>
<dimen name="nz_px_179">85.92dp</dimen>
<dimen name="nz_px_180">86.40dp</dimen>
<dimen name="nz_px_181">86.88dp</dimen>
<dimen name="nz_px_182">87.36dp</dimen>
<dimen name="nz_px_183">87.84dp</dimen>
<dimen name="nz_px_184">88.32dp</dimen>
<dimen name="nz_px_185">88.80dp</dimen>
<dimen name="nz_px_186">89.28dp</dimen>
<dimen name="nz_px_187">89.76dp</dimen>
<dimen name="nz_px_188">90.24dp</dimen>
<dimen name="nz_px_189">90.72dp</dimen>
<dimen name="nz_px_190">91.20dp</dimen>
<dimen name="nz_px_191">91.68dp</dimen>
<dimen name="nz_px_192">92.16dp</dimen>
<dimen name="nz_px_193">92.64dp</dimen>
<dimen name="nz_px_194">93.12dp</dimen>
<dimen name="nz_px_195">93.60dp</dimen>
<dimen name="nz_px_196">94.08dp</dimen>
<dimen name="nz_px_197">94.56dp</dimen>
<dimen name="nz_px_198">95.04dp</dimen>
<dimen name="nz_px_199">95.52dp</dimen>
<dimen name="nz_px_200">96.00dp</dimen>
<dimen name="nz_px_201">96.48dp</dimen>
<dimen name="nz_px_202">96.96dp</dimen>
<dimen name="nz_px_203">97.44dp</dimen>
<dimen name="nz_px_204">97.92dp</dimen>
<dimen name="nz_px_205">98.40dp</dimen>
<dimen name="nz_px_206">98.88dp</dimen>
<dimen name="nz_px_207">99.36dp</dimen>
<dimen name="nz_px_208">99.84dp</dimen>
<dimen name="nz_px_209">100.32dp</dimen>
<dimen name="nz_px_210">100.80dp</dimen>
<dimen name="nz_px_211">101.28dp</dimen>
<dimen name="nz_px_212">101.76dp</dimen>
<dimen name="nz_px_213">102.24dp</dimen>
<dimen name="nz_px_214">102.72dp</dimen>
<dimen name="nz_px_215">103.20dp</dimen>
<dimen name="nz_px_216">103.68dp</dimen>
<dimen name="nz_px_217">104.16dp</dimen>
<dimen name="nz_px_218">104.64dp</dimen>
<dimen name="nz_px_219">105.12dp</dimen>
<dimen name="nz_px_220">105.60dp</dimen>
<dimen name="nz_px_221">106.08dp</dimen>
<dimen name="nz_px_222">106.56dp</dimen>
<dimen name="nz_px_223">107.04dp</dimen>
<dimen name="nz_px_224">107.52dp</dimen>
<dimen name="nz_px_225">108.00dp</dimen>
<dimen name="nz_px_226">108.48dp</dimen>
<dimen name="nz_px_227">108.96dp</dimen>
<dimen name="nz_px_228">109.44dp</dimen>
<dimen name="nz_px_229">109.92dp</dimen>
<dimen name="nz_px_230">110.40dp</dimen>
<dimen name="nz_px_231">110.88dp</dimen>
<dimen name="nz_px_232">111.36dp</dimen>
<dimen name="nz_px_233">111.84dp</dimen>
<dimen name="nz_px_234">112.32dp</dimen>
<dimen name="nz_px_235">112.80dp</dimen>
<dimen name="nz_px_236">113.28dp</dimen>
<dimen name="nz_px_237">113.76dp</dimen>
<dimen name="nz_px_238">114.24dp</dimen>
<dimen name="nz_px_239">114.72dp</dimen>
<dimen name="nz_px_240">115.20dp</dimen>
<dimen name="nz_px_241">115.68dp</dimen>
<dimen name="nz_px_242">116.16dp</dimen>
<dimen name="nz_px_243">116.64dp</dimen>
<dimen name="nz_px_244">117.12dp</dimen>
<dimen name="nz_px_245">117.60dp</dimen>
<dimen name="nz_px_246">118.08dp</dimen>
<dimen name="nz_px_247">118.56dp</dimen>
<dimen name="nz_px_248">119.04dp</dimen>
<dimen name="nz_px_249">119.52dp</dimen>
<dimen name="nz_px_250">120.00dp</dimen>
<dimen name="nz_px_251">120.48dp</dimen>
<dimen name="nz_px_252">120.96dp</dimen>
<dimen name="nz_px_253">121.44dp</dimen>
<dimen name="nz_px_254">121.92dp</dimen>
<dimen name="nz_px_255">122.40dp</dimen>
<dimen name="nz_px_256">122.88dp</dimen>
<dimen name="nz_px_257">123.36dp</dimen>
<dimen name="nz_px_258">123.84dp</dimen>
<dimen name="nz_px_259">124.32dp</dimen>
<dimen name="nz_px_260">124.80dp</dimen>
<dimen name="nz_px_261">125.28dp</dimen>
<dimen name="nz_px_262">125.76dp</dimen>
<dimen name="nz_px_263">126.24dp</dimen>
<dimen name="nz_px_264">126.72dp</dimen>
<dimen name="nz_px_265">127.20dp</dimen>
<dimen name="nz_px_266">127.68dp</dimen>
<dimen name="nz_px_267">128.16dp</dimen>
<dimen name="nz_px_268">128.64dp</dimen>
<dimen name="nz_px_269">129.12dp</dimen>
<dimen name="nz_px_270">129.60dp</dimen>
<dimen name="nz_px_271">130.08dp</dimen>
<dimen name="nz_px_272">130.56dp</dimen>
<dimen name="nz_px_273">131.04dp</dimen>
<dimen name="nz_px_274">131.52dp</dimen>
<dimen name="nz_px_275">132.00dp</dimen>
<dimen name="nz_px_276">132.48dp</dimen>
<dimen name="nz_px_277">132.96dp</dimen>
<dimen name="nz_px_278">133.44dp</dimen>
<dimen name="nz_px_279">133.92dp</dimen>
<dimen name="nz_px_280">134.40dp</dimen>
<dimen name="nz_px_281">134.88dp</dimen>
<dimen name="nz_px_282">135.36dp</dimen>
<dimen name="nz_px_283">135.84dp</dimen>
<dimen name="nz_px_284">136.32dp</dimen>
<dimen name="nz_px_285">136.80dp</dimen>
<dimen name="nz_px_286">137.28dp</dimen>
<dimen name="nz_px_287">137.76dp</dimen>
<dimen name="nz_px_288">138.24dp</dimen>
<dimen name="nz_px_289">138.72dp</dimen>
<dimen name="nz_px_290">139.20dp</dimen>
<dimen name="nz_px_291">139.68dp</dimen>
<dimen name="nz_px_292">140.16dp</dimen>
<dimen name="nz_px_293">140.64dp</dimen>
<dimen name="nz_px_294">141.12dp</dimen>
<dimen name="nz_px_295">141.60dp</dimen>
<dimen name="nz_px_296">142.08dp</dimen>
<dimen name="nz_px_297">142.56dp</dimen>
<dimen name="nz_px_298">143.04dp</dimen>
<dimen name="nz_px_299">143.52dp</dimen>
<dimen name="nz_px_300">144.00dp</dimen>
<dimen name="nz_px_301">144.48dp</dimen>
<dimen name="nz_px_302">144.96dp</dimen>
<dimen name="nz_px_303">145.44dp</dimen>
<dimen name="nz_px_304">145.92dp</dimen>
<dimen name="nz_px_305">146.40dp</dimen>
<dimen name="nz_px_306">146.88dp</dimen>
<dimen name="nz_px_307">147.36dp</dimen>
<dimen name="nz_px_308">147.84dp</dimen>
<dimen name="nz_px_309">148.32dp</dimen>
<dimen name="nz_px_310">148.80dp</dimen>
<dimen name="nz_px_311">149.28dp</dimen>
<dimen name="nz_px_312">149.76dp</dimen>
<dimen name="nz_px_313">150.24dp</dimen>
<dimen name="nz_px_314">150.72dp</dimen>
<dimen name="nz_px_315">151.20dp</dimen>
<dimen name="nz_px_316">151.68dp</dimen>
<dimen name="nz_px_317">152.16dp</dimen>
<dimen name="nz_px_318">152.64dp</dimen>
<dimen name="nz_px_319">153.12dp</dimen>
<dimen name="nz_px_320">153.60dp</dimen>
<dimen name="nz_px_321">154.08dp</dimen>
<dimen name="nz_px_322">154.56dp</dimen>
<dimen name="nz_px_323">155.04dp</dimen>
<dimen name="nz_px_324">155.52dp</dimen>
<dimen name="nz_px_325">156.00dp</dimen>
<dimen name="nz_px_326">156.48dp</dimen>
<dimen name="nz_px_327">156.96dp</dimen>
<dimen name="nz_px_328">157.44dp</dimen>
<dimen name="nz_px_329">157.92dp</dimen>
<dimen name="nz_px_330">158.40dp</dimen>
<dimen name="nz_px_331">158.88dp</dimen>
<dimen name="nz_px_332">159.36dp</dimen>
<dimen name="nz_px_333">159.84dp</dimen>
<dimen name="nz_px_334">160.32dp</dimen>
<dimen name="nz_px_335">160.80dp</dimen>
<dimen name="nz_px_336">161.28dp</dimen>
<dimen name="nz_px_337">161.76dp</dimen>
<dimen name="nz_px_338">162.24dp</dimen>
<dimen name="nz_px_339">162.72dp</dimen>
<dimen name="nz_px_340">163.20dp</dimen>
<dimen name="nz_px_341">163.68dp</dimen>
<dimen name="nz_px_342">164.16dp</dimen>
<dimen name="nz_px_343">164.64dp</dimen>
<dimen name="nz_px_344">165.12dp</dimen>
<dimen name="nz_px_345">165.60dp</dimen>
<dimen name="nz_px_346">166.08dp</dimen>
<dimen name="nz_px_347">166.56dp</dimen>
<dimen name="nz_px_348">167.04dp</dimen>
<dimen name="nz_px_349">167.52dp</dimen>
<dimen name="nz_px_350">168.00dp</dimen>
<dimen name="nz_px_351">168.48dp</dimen>
<dimen name="nz_px_352">168.96dp</dimen>
<dimen name="nz_px_353">169.44dp</dimen>
<dimen name="nz_px_354">169.92dp</dimen>
<dimen name="nz_px_355">170.40dp</dimen>
<dimen name="nz_px_356">170.88dp</dimen>
<dimen name="nz_px_357">171.36dp</dimen>
<dimen name="nz_px_358">171.84dp</dimen>
<dimen name="nz_px_359">172.32dp</dimen>
<dimen name="nz_px_360">172.80dp</dimen>
<dimen name="nz_px_361">173.28dp</dimen>
<dimen name="nz_px_362">173.76dp</dimen>
<dimen name="nz_px_363">174.24dp</dimen>
<dimen name="nz_px_364">174.72dp</dimen>
<dimen name="nz_px_365">175.20dp</dimen>
<dimen name="nz_px_366">175.68dp</dimen>
<dimen name="nz_px_367">176.16dp</dimen>
<dimen name="nz_px_368">176.64dp</dimen>
<dimen name="nz_px_369">177.12dp</dimen>
<dimen name="nz_px_370">177.60dp</dimen>
<dimen name="nz_px_371">178.08dp</dimen>
<dimen name="nz_px_372">178.56dp</dimen>
<dimen name="nz_px_373">179.04dp</dimen>
<dimen name="nz_px_374">179.52dp</dimen>
<dimen name="nz_px_375">180.00dp</dimen>
<dimen name="nz_px_376">180.48dp</dimen>
<dimen name="nz_px_377">180.96dp</dimen>
<dimen name="nz_px_378">181.44dp</dimen>
<dimen name="nz_px_379">181.92dp</dimen>
<dimen name="nz_px_380">182.40dp</dimen>
<dimen name="nz_px_381">182.88dp</dimen>
<dimen name="nz_px_382">183.36dp</dimen>
<dimen name="nz_px_383">183.84dp</dimen>
<dimen name="nz_px_384">184.32dp</dimen>
<dimen name="nz_px_385">184.80dp</dimen>
<dimen name="nz_px_386">185.28dp</dimen>
<dimen name="nz_px_387">185.76dp</dimen>
<dimen name="nz_px_388">186.24dp</dimen>
<dimen name="nz_px_389">186.72dp</dimen>
<dimen name="nz_px_390">187.20dp</dimen>
<dimen name="nz_px_391">187.68dp</dimen>
<dimen name="nz_px_392">188.16dp</dimen>
<dimen name="nz_px_393">188.64dp</dimen>
<dimen name="nz_px_394">189.12dp</dimen>
<dimen name="nz_px_395">189.60dp</dimen>
<dimen name="nz_px_396">190.08dp</dimen>
<dimen name="nz_px_397">190.56dp</dimen>
<dimen name="nz_px_398">191.04dp</dimen>
<dimen name="nz_px_399">191.52dp</dimen>
<dimen name="nz_px_400">192.00dp</dimen>
</resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment