Commit f25a823c by Luosp

去掉导航,保留自有需求功能

parent 22323871
...@@ -9,7 +9,7 @@ android { ...@@ -9,7 +9,7 @@ android {
versionCode 1 versionCode 1
versionName "0.0.2" versionName "0.0.2"
consumerProguardFiles 'consumer-rules.pro' consumerProguardFiles 'consumer-rules.pro'
ndk{ ndk {
abiFilters "armeabi-v7a" abiFilters "armeabi-v7a"
// abiFilters "arm64-v8a" // abiFilters "arm64-v8a"
// abiFilters "armeabi" // abiFilters "armeabi"
...@@ -54,13 +54,12 @@ android { ...@@ -54,13 +54,12 @@ android {
} }
dependencies { dependencies {
//导航
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs') implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.1.0'
//arcgis地图 //arcgis地图
api 'com.esri.arcgisruntime:arcgis-android:100.6.0' implementation 'com.esri.arcgisruntime:arcgis-android:100.6.0'
//权限 //权限
implementation 'com.yanzhenjie:permission:2.0.3' implementation 'com.yanzhenjie:permission:2.0.3'
//日志类 //日志类
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
<!--网络--> <!--网络-->
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<!--存储-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--定位--> <!--定位-->
...@@ -54,8 +55,21 @@ ...@@ -54,8 +55,21 @@
<uses-feature <uses-feature
android:glEsVersion="0x00020000" android:glEsVersion="0x00020000"
android:required="true" /> android:required="true" />
<application <application
android:networkSecurityConfig="@xml/network_security_config" android:networkSecurityConfig="@xml/network_security_config"
tools:targetApi="n" /> android:requestLegacyExternalStorage="true"
android:hardwareAccelerated="true"
tools:targetApi="n" >
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="cn.com.founder.arcgislib.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/my_provider_file" />
</provider>
</application>
</manifest> </manifest>
...@@ -8,6 +8,7 @@ import cn.com.founder.arcgislib.common.Variable; ...@@ -8,6 +8,7 @@ import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.model.PointModel; import cn.com.founder.arcgislib.model.PointModel;
import cn.com.founder.arcgislib.view.ArcGisClusterView; import cn.com.founder.arcgislib.view.ArcGisClusterView;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
...@@ -7,6 +7,7 @@ import cn.com.founder.arcgislib.common.Variable; ...@@ -7,6 +7,7 @@ import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.model.PointModel; import cn.com.founder.arcgislib.model.PointModel;
import cn.com.founder.arcgislib.view.ArcGisClusterView; import cn.com.founder.arcgislib.view.ArcGisClusterView;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
package cn.com.founder.arcgislib.compass; package cn.com.founder.arcgislib.compass;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.compass.listener.IOnClickListener; import cn.com.founder.arcgislib.compass.listener.IOnClickListener;
import cn.com.founder.arcgislib.compass.listener.IRotationListener; import cn.com.founder.arcgislib.compass.listener.IRotationListener;
......
package cn.com.founder.arcgislib.compass.option; package cn.com.founder.arcgislib.compass.option;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.compass.listener.IOnClickListener; import cn.com.founder.arcgislib.compass.listener.IOnClickListener;
import cn.com.founder.arcgislib.compass.listener.IRotationListener; import cn.com.founder.arcgislib.compass.listener.IRotationListener;
......
...@@ -9,7 +9,7 @@ package cn.com.founder.arcgislib.constants; ...@@ -9,7 +9,7 @@ package cn.com.founder.arcgislib.constants;
*/ */
public class Constants { public class Constants {
/*****************************************互联网********************************************* /*****************************************互联网*********************************************/
//互联网-地图 //互联网-地图
private static String baseUrl = "http://47.92.225.109:6080/arcgis/rest/services/founder/dg20191120/MapServer"; private static String baseUrl = "http://47.92.225.109:6080/arcgis/rest/services/founder/dg20191120/MapServer";
//互联网-Geo //互联网-Geo
...@@ -37,12 +37,12 @@ public class Constants { ...@@ -37,12 +37,12 @@ public class Constants {
/**********************************************************************************************/ /**********************************************************************************************/
/*****************************************用户网***********************************************/ /*****************************************用户网***********************************************
//如果使用公安局的映射,导航907和958行代码需要修改坐标系 //如果使用公安局的映射,导航907和958行代码需要修改坐标系
//用户网-地图 //用户网-地图
private static String baseUrl = "http://192.168.2.56:19076/arcgis/rest/services/founder/dg20191120/MapServer"; private static String baseUrl = "http://192.168.2.56:19076/arcgis/rest/services/founder/dg20191120/MapServer";
//用户网-导航 //用户网-导航
private static String naviUrl = "http://192.168.2.56:19085/PPmap/LBSservice"; private static String naviUrl = "192.168.2.56:19095/PPmap/LBSservice2/";
//公安网-Geo //公安网-Geo
private static String baseGeoUrl = "http://192.168.2.56:19087/esBzdzTestQuery"; private static String baseGeoUrl = "http://192.168.2.56:19087/esBzdzTestQuery";
//用户网-搜索 //用户网-搜索
...@@ -54,9 +54,9 @@ public class Constants { ...@@ -54,9 +54,9 @@ public class Constants {
//二标四实-地址 //二标四实-地址
private static String dzUrl = "http://192.168.2.56:19084/selectVdzjx"; private static String dzUrl = "http://192.168.2.56:19084/selectVdzjx";
//华为网关鉴权服务-accessToken(导航时调用) //华为网关鉴权服务-accessToken(导航时调用)
private static String apiGUrl = "https://68.26.19.197:8343/v1/apigw/oauth2/token"; private static String apiGUrl = "https://192.168.2.56:19098/v1/apigw/oauth2/token";
//华为网关鉴权服务-userToken(导航时调用) //华为网关鉴权服务-userToken(导航时调用)
private static String apiGLoginUrl = "http://68.26.19.197:8380/dcuc/api/checklogin.action"; private static String apiGLoginUrl = "http://192.168.2.56:19095/dcuc/api/checklogin.action";
//热力图 //热力图
private static String hotMapUrl = "http://192.168.2.56:19088/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer"; private static String hotMapUrl = "http://192.168.2.56:19088/arcgis/rest/services/gp/rltModel/GPServer/hotPotServer";
/********************************************************************************************** /**********************************************************************************************
...@@ -70,7 +70,6 @@ public class Constants { ...@@ -70,7 +70,6 @@ public class Constants {
//公安网-搜索 //公安网-搜索
private static String searchUrl = "http://68.174.69.46:8051/selectPoiDataList"; private static String searchUrl = "http://68.174.69.46:8051/selectPoiDataList";
//公安网-导航 //公安网-导航
// private static String naviUrl = "http://68.26.19.197:8380/PPmap/LBSservice";
private static String naviUrl = "68.26.19.197:8380/PPmap/LBSservice2/"; private static String naviUrl = "68.26.19.197:8380/PPmap/LBSservice2/";
//二标四实-单位 //二标四实-单位
private static String dwUrl = "http://68.174.69.46:8051/selectVdwjx"; private static String dwUrl = "http://68.174.69.46:8051/selectVdwjx";
...@@ -94,8 +93,10 @@ public class Constants { ...@@ -94,8 +93,10 @@ public class Constants {
//天地图Geo //天地图Geo
private static String baseTianDiTuGeoUrl = "http://api.tianditu.gov.cn/geocoder"; private static String baseTianDiTuGeoUrl = "http://api.tianditu.gov.cn/geocoder";
//华为鉴权 //华为鉴权
// private static String baseHuaweiAuthA = "445381199206035738";
// private static String baseHuaweiAuthP = "Cennavi@2019";
private static String baseHuaweiAuthA = "445281199401182770"; private static String baseHuaweiAuthA = "445281199401182770";
private static String baseHuaweiAuthP = "JWY123@cjh"; private static String baseHuaweiAuthP = "JWY@123CJH";
private static String baseHuaweiAuthAppKey = "2a1c50f40af443a4b58d1375e87a4810"; private static String baseHuaweiAuthAppKey = "2a1c50f40af443a4b58d1375e87a4810";
private static String baseHuaweiAuthAppSecret = "1321cbbf9f3947108aee3f44ea007485"; private static String baseHuaweiAuthAppSecret = "1321cbbf9f3947108aee3f44ea007485";
//arcGis证书 //arcGis证书
......
...@@ -7,6 +7,7 @@ import cn.com.founder.arcgislib.draw.option.IArcGisDrawOption; ...@@ -7,6 +7,7 @@ import cn.com.founder.arcgislib.draw.option.IArcGisDrawOption;
import cn.com.founder.arcgislib.model.PointModel; import cn.com.founder.arcgislib.model.PointModel;
import cn.com.founder.arcgislib.view.ArcGisDrawView; import cn.com.founder.arcgislib.view.ArcGisDrawView;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
...@@ -5,6 +5,7 @@ import java.util.List; ...@@ -5,6 +5,7 @@ import java.util.List;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.model.PointModel; import cn.com.founder.arcgislib.model.PointModel;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
...@@ -7,6 +7,7 @@ import cn.com.founder.arcgislib.hotpots.option.IArcGisHotPotsOption; ...@@ -7,6 +7,7 @@ import cn.com.founder.arcgislib.hotpots.option.IArcGisHotPotsOption;
import cn.com.founder.arcgislib.model.PointModel; import cn.com.founder.arcgislib.model.PointModel;
import cn.com.founder.arcgislib.view.ArcGisHotPotsView; import cn.com.founder.arcgislib.view.ArcGisHotPotsView;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
...@@ -5,6 +5,7 @@ import java.util.List; ...@@ -5,6 +5,7 @@ import java.util.List;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.model.PointModel; import cn.com.founder.arcgislib.model.PointModel;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
...@@ -7,7 +7,7 @@ import cn.com.founder.arcgislib.location.listener.ILocationChangeListener; ...@@ -7,7 +7,7 @@ import cn.com.founder.arcgislib.location.listener.ILocationChangeListener;
import cn.com.founder.arcgislib.location.option.IArcGisLocationOption; import cn.com.founder.arcgislib.location.option.IArcGisLocationOption;
import cn.com.founder.arcgislib.model.PointModel; import cn.com.founder.arcgislib.model.PointModel;
import cn.com.founder.arcgislib.view.ArcGisLocationView; import cn.com.founder.arcgislib.view.ArcGisLocationView;
import cn.com.founder.arcgislib.view.ArcGisMapView;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
...@@ -161,6 +161,23 @@ public class ArcGisLocation implements IArcGisLocationOption { ...@@ -161,6 +161,23 @@ public class ArcGisLocation implements IArcGisLocationOption {
mArcGisLocationView.setGeoDistance(distance); mArcGisLocationView.setGeoDistance(distance);
return this; return this;
} }
/**
* @param showMap 是否显示地图,默认显示
*/
@Override
public IArcGisLocationOption setShowMap(boolean showMap) {
mArcGisLocationView.setShowMap(showMap);
return this;
}
/**
* @param showLoading 是否显示请求加载框,默认显示
*/
@Override
public IArcGisLocationOption setShowLoading(boolean showLoading) {
mArcGisLocationView.setShowLoading(showLoading);
return this;
}
@Override @Override
public ArcGisLocationView.CalloutStyleBuilder getCalloutStyleBuilder() { public ArcGisLocationView.CalloutStyleBuilder getCalloutStyleBuilder() {
......
...@@ -7,6 +7,7 @@ import cn.com.founder.arcgislib.location.listener.ILocationChangeListener; ...@@ -7,6 +7,7 @@ import cn.com.founder.arcgislib.location.listener.ILocationChangeListener;
import cn.com.founder.arcgislib.model.PointModel; import cn.com.founder.arcgislib.model.PointModel;
import cn.com.founder.arcgislib.view.ArcGisLocationView; import cn.com.founder.arcgislib.view.ArcGisLocationView;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
...@@ -97,6 +98,15 @@ public interface IArcGisLocationOption { ...@@ -97,6 +98,15 @@ public interface IArcGisLocationOption {
*/ */
IArcGisLocationOption setGeoDistance(double distance); IArcGisLocationOption setGeoDistance(double distance);
/** /**
* @param showMap 是否显示地图,默认显示
*/
IArcGisLocationOption setShowMap(boolean showMap);
/**
* @param showLoading 是否显示请求加载框,默认显示
*/
IArcGisLocationOption setShowLoading(boolean showLoading);
/**
* callout样式 * callout样式
*/ */
ArcGisLocationView.CalloutStyleBuilder getCalloutStyleBuilder(); ArcGisLocationView.CalloutStyleBuilder getCalloutStyleBuilder();
......
...@@ -5,6 +5,7 @@ import android.os.Parcelable; ...@@ -5,6 +5,7 @@ import android.os.Parcelable;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
...@@ -38,6 +39,8 @@ public class LocationModel implements Parcelable { ...@@ -38,6 +39,8 @@ public class LocationModel implements Parcelable {
private Variable.LocationChangeType locationChangeType; private Variable.LocationChangeType locationChangeType;
private boolean isPoiData = true;
public LocationModel(double xPoint, double yPoint, String address, String poi, String extraInfo, Variable.LocationChangeType locationChangeType) { public LocationModel(double xPoint, double yPoint, String address, String poi, String extraInfo, Variable.LocationChangeType locationChangeType) {
this.xPoint = xPoint; this.xPoint = xPoint;
this.yPoint = yPoint; this.yPoint = yPoint;
...@@ -56,12 +59,13 @@ public class LocationModel implements Parcelable { ...@@ -56,12 +59,13 @@ public class LocationModel implements Parcelable {
} }
private LocationModel(Parcel in){ private LocationModel(Parcel in){
xPoint = in.readDouble(); this.xPoint = in.readDouble();
yPoint = in.readDouble(); this.yPoint = in.readDouble();
address = in.readString(); this.address = in.readString();
poi = in.readString(); this.poi = in.readString();
extraInfo = in.readString(); this.extraInfo = in.readString();
locationChangeType = in.readParcelable(Variable.LocationChangeType.class.getClassLoader()); this.locationChangeType = in.readParcelable(Variable.LocationChangeType.class.getClassLoader());
this.isPoiData = in.readByte() != 0;
} }
public static final Creator<LocationModel> CREATOR = new Creator<LocationModel>() { public static final Creator<LocationModel> CREATOR = new Creator<LocationModel>() {
...@@ -89,6 +93,7 @@ public class LocationModel implements Parcelable { ...@@ -89,6 +93,7 @@ public class LocationModel implements Parcelable {
parcel.writeString(poi); parcel.writeString(poi);
parcel.writeString(extraInfo); parcel.writeString(extraInfo);
parcel.writeParcelable(locationChangeType,i); parcel.writeParcelable(locationChangeType,i);
parcel.writeByte(this.isPoiData ? (byte) 1 : (byte) 0);
} }
/** /**
...@@ -181,4 +186,28 @@ public class LocationModel implements Parcelable { ...@@ -181,4 +186,28 @@ public class LocationModel implements Parcelable {
public void setLocationChangeType(Variable.LocationChangeType locationChangeType) { public void setLocationChangeType(Variable.LocationChangeType locationChangeType) {
this.locationChangeType = locationChangeType; this.locationChangeType = locationChangeType;
} }
public double getxPoint() {
return xPoint;
}
public void setxPoint(double xPoint) {
this.xPoint = xPoint;
}
public double getyPoint() {
return yPoint;
}
public void setyPoint(double yPoint) {
this.yPoint = yPoint;
}
public boolean isPoiData() {
return isPoiData;
}
public void setPoiData(boolean poiData) {
isPoiData = poiData;
}
} }
...@@ -28,38 +28,12 @@ public class SearchModel implements Parcelable { ...@@ -28,38 +28,12 @@ public class SearchModel implements Parcelable {
*/ */
private double y; private double y;
public SearchModel(){} /**
public SearchModel(Parcel in){ * 客户要求需区分数据源,目前在搜索时poi和二标四十
poiname = in.readString(); */
poiaddress = in.readString(); private boolean isPoiData;
x = in.readDouble();
y = in.readDouble();
}
public static final Creator<SearchModel> CREATOR = new Creator<SearchModel>() {
@Override
public SearchModel createFromParcel(Parcel in) {
return new SearchModel(in);
}
@Override
public SearchModel[] newArray(int size) {
return new SearchModel[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override public SearchModel(){}
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(poiname);
parcel.writeString(poiaddress);
parcel.writeDouble(x);
parcel.writeDouble(y);
}
public String getPoiname() { public String getPoiname() {
return poiname; return poiname;
...@@ -92,4 +66,46 @@ public class SearchModel implements Parcelable { ...@@ -92,4 +66,46 @@ public class SearchModel implements Parcelable {
public void setY(double y) { public void setY(double y) {
this.y = y; this.y = y;
} }
public boolean isPoiData() {
return isPoiData;
}
public void setPoiData(boolean poiData) {
isPoiData = poiData;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.poiname);
dest.writeString(this.poiaddress);
dest.writeDouble(this.x);
dest.writeDouble(this.y);
dest.writeByte(this.isPoiData ? (byte) 1 : (byte) 0);
}
protected SearchModel(Parcel in) {
this.poiname = in.readString();
this.poiaddress = in.readString();
this.x = in.readDouble();
this.y = in.readDouble();
this.isPoiData = in.readByte() != 0;
}
public static final Creator<SearchModel> CREATOR = new Creator<SearchModel>() {
@Override
public SearchModel createFromParcel(Parcel source) {
return new SearchModel(source);
}
@Override
public SearchModel[] newArray(int size) {
return new SearchModel[size];
}
};
} }
package cn.com.founder.arcgislib.navi; package cn.com.founder.arcgislib.navi;
import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.model.PointModel;
import cn.com.founder.arcgislib.navi.option.IArcGisNaviOption; import cn.com.founder.arcgislib.navi.option.IArcGisNaviOption;
import cn.com.founder.arcgislib.view.ArcGisNaviView; import cn.com.founder.arcgislib.view.ArcGisNaviView;
...@@ -22,27 +21,27 @@ public class ArcGisNavi implements IArcGisNaviOption { ...@@ -22,27 +21,27 @@ public class ArcGisNavi implements IArcGisNaviOption {
this.mArcGisNaviView = arcGisNaviView; this.mArcGisNaviView = arcGisNaviView;
} }
@Override // @Override
public IArcGisNaviOption setShowNaviLayout(boolean isShow) { // public IArcGisNaviOption setShowNaviLayout(boolean isShow) {
mArcGisNaviView.setShowNaviLayout(isShow); // mArcGisNaviView.setShowNaviLayout(isShow);
return this; // return this;
} // }
//
@Override // @Override
public IArcGisNaviOption setNaviViewLocation(Variable.ViewLocation location) { // public IArcGisNaviOption setNaviViewLocation(Variable.ViewLocation location) {
mArcGisNaviView.setNaviViewLocation(location); // mArcGisNaviView.setNaviViewLocation(location);
return this; // return this;
} // }
//
@Override // @Override
public IArcGisNaviOption setNaviImage(int naviImage) { // public IArcGisNaviOption setNaviImage(int naviImage) {
mArcGisNaviView.setNaviImage(naviImage); // mArcGisNaviView.setNaviImage(naviImage);
return this; // return this;
} // }
//
@Override // @Override
public IArcGisNaviOption setCustomPointNavi(PointModel startPoint, PointModel endPoint) { // public IArcGisNaviOption setCustomPointNavi(PointModel startPoint, PointModel endPoint) {
mArcGisNaviView.setCustomPointNavi(startPoint,endPoint); // mArcGisNaviView.setCustomPointNavi(startPoint,endPoint);
return this; // return this;
} // }
} }
package cn.com.founder.arcgislib.navi.option; package cn.com.founder.arcgislib.navi.option;
import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.model.PointModel;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
...@@ -11,26 +9,26 @@ import cn.com.founder.arcgislib.model.PointModel; ...@@ -11,26 +9,26 @@ import cn.com.founder.arcgislib.model.PointModel;
* Description:导航操作 * Description:导航操作
*/ */
public interface IArcGisNaviOption { public interface IArcGisNaviOption {
/** // /**
* @param isShow boolean-是否显示导航布局 // * @param isShow boolean-是否显示导航布局
* 默认隐藏 // * 默认隐藏
*/ // */
IArcGisNaviOption setShowNaviLayout(boolean isShow); // IArcGisNaviOption setShowNaviLayout(boolean isShow);
//
/** // /**
* @param location {@link Variable.ViewLocation } NaviView显示位置 // * @param location {@link Variable.ViewLocation } NaviView显示位置
*/ // */
IArcGisNaviOption setNaviViewLocation(Variable.ViewLocation location); // IArcGisNaviOption setNaviViewLocation(Variable.ViewLocation location);
//
/** // /**
* @param naviImage int(资源ID)-导航图片 // * @param naviImage int(资源ID)-导航图片
*/ // */
IArcGisNaviOption setNaviImage(int naviImage); // IArcGisNaviOption setNaviImage(int naviImage);
//
/** // /**
* 自定义点导航 // * 自定义点导航
* @param startPoint 起点 // * @param startPoint 起点
* @param endPoint 终点 // * @param endPoint 终点
*/ // */
IArcGisNaviOption setCustomPointNavi(PointModel startPoint, PointModel endPoint); // IArcGisNaviOption setCustomPointNavi(PointModel startPoint, PointModel endPoint);
} }
package cn.com.founder.arcgislib.option; package cn.com.founder.arcgislib.option;
import cn.com.founder.arcgislib.cluster.option.IArcGisClusterOption; import cn.com.founder.arcgislib.cluster.option.IArcGisClusterOption;
import cn.com.founder.arcgislib.compass.option.IArcGisCompassOption; import cn.com.founder.arcgislib.compass.option.IArcGisCompassOption;
import cn.com.founder.arcgislib.draw.option.IArcGisDrawOption; import cn.com.founder.arcgislib.draw.option.IArcGisDrawOption;
......
package cn.com.founder.arcgislib.search; package cn.com.founder.arcgislib.search;
import cn.com.founder.arcgislib.search.listener.ISearchSelectedListener; import cn.com.founder.arcgislib.search.listener.ISearchSelectedListener;
import cn.com.founder.arcgislib.search.option.IArcGisSearchOption; import cn.com.founder.arcgislib.search.option.IArcGisSearchOption;
import cn.com.founder.arcgislib.view.ArcGisSearchView; import cn.com.founder.arcgislib.view.ArcGisSearchView;
......
...@@ -4,6 +4,7 @@ import java.util.List; ...@@ -4,6 +4,7 @@ import java.util.List;
import cn.com.founder.arcgislib.model.SearchModel; import cn.com.founder.arcgislib.model.SearchModel;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
package cn.com.founder.arcgislib.source; package cn.com.founder.arcgislib.source;
import android.app.Activity;
import android.app.Fragment; import android.app.Fragment;
import android.content.Context; import android.content.Context;
......
package cn.com.founder.arcgislib.utils;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.ConnectionPool;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
/**
* Copyright: 方正国际软件有限公司
* Author:luo_shaopeng
* Date:2021/1/12 15:55
* EMail:luo_shaopeng@founder.com.cn
* Description:okhttp工具类
*/
public class OkHttpUtil {
private static OkHttpClient client;
public static OkHttpClient getInstance() {
if (client == null) {
synchronized (OkHttpUtil.class) {
if (client == null) {
client = (new OkHttpClient.Builder()).connectTimeout(10L, TimeUnit.SECONDS).
writeTimeout(10L, TimeUnit.SECONDS).readTimeout(10L, TimeUnit.SECONDS)
.connectionPool(new ConnectionPool(5, 1L, TimeUnit.SECONDS))
.sslSocketFactory(ToolUtil.getSSLSocketFactory())
.hostnameVerifier(ToolUtil.getHostnameVerifier()).build();
}
}
}
return client;
}
public static void doPost(String url, String jsonParams, Callback callback) {
RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonParams);
Request request = (new okhttp3.Request.Builder()).url(url).post(body).build();
Call call = getInstance().newCall(request);
call.enqueue(callback);
}
}
\ No newline at end of file
...@@ -35,6 +35,7 @@ import javax.net.ssl.X509TrustManager; ...@@ -35,6 +35,7 @@ import javax.net.ssl.X509TrustManager;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
...@@ -40,7 +40,6 @@ import com.esri.arcgisruntime.mapping.view.MapView; ...@@ -40,7 +40,6 @@ import com.esri.arcgisruntime.mapping.view.MapView;
import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.minedata.minenavi.common.OkHttp3Utils;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -58,6 +57,7 @@ import cn.com.founder.arcgislib.constants.Constants; ...@@ -58,6 +57,7 @@ import cn.com.founder.arcgislib.constants.Constants;
import cn.com.founder.arcgislib.model.LocationModel; import cn.com.founder.arcgislib.model.LocationModel;
import cn.com.founder.arcgislib.model.PointModel; import cn.com.founder.arcgislib.model.PointModel;
import cn.com.founder.arcgislib.utils.GsonUtil; import cn.com.founder.arcgislib.utils.GsonUtil;
import cn.com.founder.arcgislib.utils.OkHttpUtil;
import cn.com.founder.arcgislib.utils.ToolUtil; import cn.com.founder.arcgislib.utils.ToolUtil;
import cn.com.founder.arcgislib.widget.cluster.ClusterLayer; import cn.com.founder.arcgislib.widget.cluster.ClusterLayer;
import okhttp3.Call; import okhttp3.Call;
...@@ -609,7 +609,7 @@ public class ArcGisClusterView extends LinearLayout implements View.OnClickListe ...@@ -609,7 +609,7 @@ public class ArcGisClusterView extends LinearLayout implements View.OnClickListe
e.printStackTrace(); e.printStackTrace();
} }
// Log.e("GEOCeoder========",jsonObject.toString()); // Log.e("GEOCeoder========",jsonObject.toString());
OkHttp3Utils.doPost(Constants.BASE_GEO_URL, jsonObject.toString(), new Callback() { OkHttpUtil.doPost(Constants.BASE_GEO_URL, jsonObject.toString(), new Callback() {
@Override @Override
public void onFailure(Call call, IOException e) { public void onFailure(Call call, IOException e) {
disDialog(); disDialog();
......
...@@ -23,9 +23,9 @@ import cn.com.founder.arcgislib.R; ...@@ -23,9 +23,9 @@ import cn.com.founder.arcgislib.R;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.model.PointModel; import cn.com.founder.arcgislib.model.PointModel;
import cn.com.founder.arcgislib.widget.draw.DrawEntity; import cn.com.founder.arcgislib.widget.draw.DrawEntity;
import cn.com.founder.arcgislib.widget.draw.DrawLayer;
import cn.com.founder.arcgislib.widget.draw.DrawView; import cn.com.founder.arcgislib.widget.draw.DrawView;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
...@@ -101,7 +101,7 @@ public class ArcGisDrawView extends LinearLayout implements View.OnClickListener ...@@ -101,7 +101,7 @@ public class ArcGisDrawView extends LinearLayout implements View.OnClickListener
private MapView mMapView; private MapView mMapView;
/** /**
* {@link DrawLayer} * {@link DrawView}
*/ */
private DrawView mDrawView; private DrawView mDrawView;
private Variable.DrawType drawType = null; private Variable.DrawType drawType = null;
......
...@@ -40,6 +40,7 @@ import cn.com.founder.arcgislib.constants.Constants; ...@@ -40,6 +40,7 @@ import cn.com.founder.arcgislib.constants.Constants;
import cn.com.founder.arcgislib.model.PointModel; import cn.com.founder.arcgislib.model.PointModel;
import cn.com.founder.arcgislib.widget.popup.PopupLayout; import cn.com.founder.arcgislib.widget.popup.PopupLayout;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
...@@ -46,7 +46,6 @@ import com.esri.arcgisruntime.mapping.view.MapView; ...@@ -46,7 +46,6 @@ import com.esri.arcgisruntime.mapping.view.MapView;
import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; import com.esri.arcgisruntime.symbology.PictureMarkerSymbol;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.minedata.minenavi.common.OkHttp3Utils;
import com.yanzhenjie.permission.AndPermission; import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.runtime.Permission; import com.yanzhenjie.permission.runtime.Permission;
...@@ -67,6 +66,7 @@ import cn.com.founder.arcgislib.location.listener.ILocationChangeListener; ...@@ -67,6 +66,7 @@ import cn.com.founder.arcgislib.location.listener.ILocationChangeListener;
import cn.com.founder.arcgislib.model.LocationModel; import cn.com.founder.arcgislib.model.LocationModel;
import cn.com.founder.arcgislib.model.PointModel; import cn.com.founder.arcgislib.model.PointModel;
import cn.com.founder.arcgislib.utils.GsonUtil; import cn.com.founder.arcgislib.utils.GsonUtil;
import cn.com.founder.arcgislib.utils.OkHttpUtil;
import cn.com.founder.arcgislib.utils.PermissionUtil; import cn.com.founder.arcgislib.utils.PermissionUtil;
import cn.com.founder.arcgislib.utils.ToolUtil; import cn.com.founder.arcgislib.utils.ToolUtil;
import okhttp3.Call; import okhttp3.Call;
...@@ -124,7 +124,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -124,7 +124,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
/** /**
* 手动定位图层 * 手动定位图层
*/ */
private GraphicsOverlay mManualGraphicsOverlay; protected GraphicsOverlay mManualGraphicsOverlay;
/** /**
* 手动定位x点 * 手动定位x点
*/ */
...@@ -227,6 +227,16 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -227,6 +227,16 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
*/ */
protected boolean preventClick = false; protected boolean preventClick = false;
/**
* 是否显示地图,比如后台定位
*/
private boolean isShowMap = true;
/**
* 是否显示请求加载框
*/
private boolean isShowLoading = true;
public ArcGisLocationView(Context context, ArcGisMapView arcGisMapView) { public ArcGisLocationView(Context context, ArcGisMapView arcGisMapView) {
this(context); this(context);
this.mContext = context; this.mContext = context;
...@@ -443,58 +453,77 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -443,58 +453,77 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
} }
scale = scale * 100000; scale = scale * 100000;
this.mScale = scale; this.mScale = scale;
mMapView.addDrawStatusChangedListener(new DrawStatusChangedListener() {
@Override if (!isShowMap) {
public void drawStatusChanged(final DrawStatusChangedEvent drawStatusChangedEvent) { mLocationDisplay = mMapView.getLocationDisplay();
if (drawStatusChangedEvent.getDrawStatus() == DrawStatus.COMPLETED) { mLocationDisplay.setAutoPanMode(LocationDisplay.AutoPanMode.RECENTER);
mMapView.removeDrawStatusChangedListener(this); mLocationDisplay.startAsync();
mLocationDisplay = mMapView.getLocationDisplay(); //如果要在LocationDisplay里进行位置信息的自动监听
//设置模式: mLocationDisplay.addLocationChangedListener(new LocationDisplay.LocationChangedListener() {
// COMPASS_NAVIGATION 和NAVIGATION 分别最适用于步行导航和车载导航,用户的位置符号会固定显示在屏幕的某个点上,并且指向设备的顶部(也就是地图会随着用户移动而平移,随用户转弯而旋转) @Override
// OFF 模式,用户位置符号会随位置变化而移动,但地图不会动 public void onLocationChanged(LocationDisplay.LocationChangedEvent locationChangedEvent) {
// RECENTER模式,当用户位置处于当前地图范围内时候,用户位置符号会随位置变化而移动,但地图不会动;当用户位置处于地图边缘时候,地图会自动平移是用户的当前位置重新居于显示地图中心 mLocationDisplay.removeLocationChangedListener(this);
mLocationDisplay.setAutoPanMode(LocationDisplay.AutoPanMode.RECENTER); stopLocation();
//设置默认定位图标 //业务逻辑没有导航,所以定位一次就好了,其他的可以直接直接调用定位代码
Resources resources = getResources(); LocationDataSource.Location locationInfo = locationChangedEvent.getLocation();
BitmapDrawable bitmapDrawable = new BitmapDrawable(resources, BitmapFactory.decodeResource(resources, mCenterLocationImage)); requestGeoCeoder(new Point(locationInfo.getPosition().getX(), locationInfo.getPosition().getY()), Variable.LocationChangeType.START_LOCATION, FLAG_START_LOCATION);
final PictureMarkerSymbol campsiteSymbol = new PictureMarkerSymbol(bitmapDrawable); }
campsiteSymbol.loadAsync(); });
campsiteSymbol.addDoneLoadingListener(() -> { }else{
//设置默认符号 mMapView.addDrawStatusChangedListener(new DrawStatusChangedListener() {
mLocationDisplay.setDefaultSymbol(campsiteSymbol); @Override
//隐藏符号的缓存区域 public void drawStatusChanged(final DrawStatusChangedEvent drawStatusChangedEvent) {
mLocationDisplay.setShowAccuracy(false); if (drawStatusChangedEvent.getDrawStatus() == DrawStatus.COMPLETED) {
//隐藏位置更新的符号动画 mMapView.removeDrawStatusChangedListener(this);
mLocationDisplay.setShowPingAnimation(false); mLocationDisplay = mMapView.getLocationDisplay();
//设置模式:
}); // COMPASS_NAVIGATION 和NAVIGATION 分别最适用于步行导航和车载导航,用户的位置符号会固定显示在屏幕的某个点上,并且指向设备的顶部(也就是地图会随着用户移动而平移,随用户转弯而旋转)
// OFF 模式,用户位置符号会随位置变化而移动,但地图不会动
//隐藏符号 // RECENTER模式,当用户位置处于当前地图范围内时候,用户位置符号会随位置变化而移动,但地图不会动;当用户位置处于地图边缘时候,地图会自动平移是用户的当前位置重新居于显示地图中心
mLocationDisplay.setAutoPanMode(LocationDisplay.AutoPanMode.RECENTER);
//设置默认定位图标
Resources resources = getResources();
BitmapDrawable bitmapDrawable = new BitmapDrawable(resources, BitmapFactory.decodeResource(resources, mCenterLocationImage));
final PictureMarkerSymbol campsiteSymbol = new PictureMarkerSymbol(bitmapDrawable);
campsiteSymbol.loadAsync();
campsiteSymbol.addDoneLoadingListener(() -> {
//设置默认符号
mLocationDisplay.setDefaultSymbol(campsiteSymbol);
//隐藏符号的缓存区域
mLocationDisplay.setShowAccuracy(false);
//隐藏位置更新的符号动画
mLocationDisplay.setShowPingAnimation(false);
});
//隐藏符号
// mLocationDisplay.setShowLocation(false); // mLocationDisplay.setShowLocation(false);
//显示当前位置 //显示当前位置
mLocationDisplay.startAsync(); mLocationDisplay.startAsync();
//设置初始Zoom层级 //设置初始Zoom层级
mLocationDisplay.setInitialZoomScale(mScale); mLocationDisplay.setInitialZoomScale(mScale);
//获取的点是基于当前地图坐标系的点 //获取的点是基于当前地图坐标系的点
Point point = mLocationDisplay.getMapLocation(); Point point = mLocationDisplay.getMapLocation();
//获取基于GPS的位置信息 //获取基于GPS的位置信息
LocationDataSource.Location location = mLocationDisplay.getLocation(); LocationDataSource.Location location = mLocationDisplay.getLocation();
//基于WGS84的经纬度坐标。 //基于WGS84的经纬度坐标。
Point point1 = location.getPosition(); Point point1 = location.getPosition();
//如果要在LocationDisplay里进行位置信息的自动监听 //如果要在LocationDisplay里进行位置信息的自动监听
mLocationDisplay.addLocationChangedListener(new LocationDisplay.LocationChangedListener() { mLocationDisplay.addLocationChangedListener(new LocationDisplay.LocationChangedListener() {
@Override @Override
public void onLocationChanged(LocationDisplay.LocationChangedEvent locationChangedEvent) { public void onLocationChanged(LocationDisplay.LocationChangedEvent locationChangedEvent) {
mLocationDisplay.removeLocationChangedListener(this); mLocationDisplay.removeLocationChangedListener(this);
LocationDataSource.Location locationInfo = locationChangedEvent.getLocation(); LocationDataSource.Location locationInfo = locationChangedEvent.getLocation();
requestGeoCeoder(new Point(locationInfo.getPosition().getX(), locationInfo.getPosition().getY()), Variable.LocationChangeType.START_LOCATION, FLAG_START_LOCATION); requestGeoCeoder(new Point(locationInfo.getPosition().getX(), locationInfo.getPosition().getY()), Variable.LocationChangeType.START_LOCATION, FLAG_START_LOCATION);
} }
}); });
}
} }
} });
}); }
} }
/** /**
...@@ -1188,20 +1217,37 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -1188,20 +1217,37 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
return mCalloutStyleBuilder; return mCalloutStyleBuilder;
} }
/**
* @param showMap 是否显示地图,默认显示
*/
public void setShowMap(boolean showMap) {
isShowMap = showMap;
}
/**
* @param showLoading 是否显示请求加载框,默认显示
*/
public void setShowLoading(boolean showLoading) {
isShowLoading = showLoading;
}
protected void showDialog() { protected void showDialog() {
try { if (isShowLoading) {
if (myDialog != null && myDialog.isShowing()) { try {
myDialog.dismiss(); if (myDialog != null && myDialog.isShowing()) {
} myDialog.dismiss();
myDialog = new ProgressDialog(mContext); }
myDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); myDialog = new ProgressDialog(mContext);
myDialog.setMessage("正在加载..."); myDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
myDialog.setIndeterminate(false); myDialog.setMessage("正在加载...");
myDialog.setCancelable(false); myDialog.setIndeterminate(false);
myDialog.show(); myDialog.setCancelable(false);
} catch (Exception e) { myDialog.show();
} catch (Exception e) {
}
} }
} }
/** /**
...@@ -1270,7 +1316,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -1270,7 +1316,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
e.printStackTrace(); e.printStackTrace();
} }
// Log.e("GEOCeoder========",jsonObject.toString()); // Log.e("GEOCeoder========",jsonObject.toString());
OkHttp3Utils.doPost(Constants.BASE_GEO_URL, jsonObject.toString(), new Callback() { OkHttpUtil.doPost(Constants.BASE_GEO_URL, jsonObject.toString(), new Callback() {
@Override @Override
public void onFailure(Call call, IOException e) { public void onFailure(Call call, IOException e) {
disDialog(); disDialog();
...@@ -1312,12 +1358,6 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -1312,12 +1358,6 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
} }
}); });
/**************天地图的逆地址编码**************************/ /**************天地图的逆地址编码**************************/
// String urlParams = Constants.BASE_TIANDITU_GEO_URL + "?postStr={'lon':" + point.getX() + ",'lat':" + point.getY() + ",'ver':1}&type=geocode&tk=" + Constants.BASE_TIANDITU_KEY; // String urlParams = Constants.BASE_TIANDITU_GEO_URL + "?postStr={'lon':" + point.getX() + ",'lat':" + point.getY() + ",'ver':1}&type=geocode&tk=" + Constants.BASE_TIANDITU_KEY;
// OkHttp3Utils.doGet(urlParams, new Callback() { // OkHttp3Utils.doGet(urlParams, new Callback() {
...@@ -1362,6 +1402,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -1362,6 +1402,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
public void handleMessage(@NonNull Message msg) { public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg); super.handleMessage(msg);
LocationModel locationModel = (LocationModel) msg.obj; LocationModel locationModel = (LocationModel) msg.obj;
locationModel.setPoiData(false);
switch (msg.what) { switch (msg.what) {
case FLAG_START_LOCATION: case FLAG_START_LOCATION:
if (mILocationChangeListener != null) { if (mILocationChangeListener != null) {
......
...@@ -16,6 +16,7 @@ import cn.com.founder.arcgislib.common.Variable; ...@@ -16,6 +16,7 @@ import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.compass.listener.IOnClickListener; import cn.com.founder.arcgislib.compass.listener.IOnClickListener;
import cn.com.founder.arcgislib.compass.listener.IRotationListener; import cn.com.founder.arcgislib.compass.listener.IRotationListener;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
...@@ -25,6 +25,7 @@ import cn.com.founder.arcgislib.R; ...@@ -25,6 +25,7 @@ import cn.com.founder.arcgislib.R;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.constants.Constants; import cn.com.founder.arcgislib.constants.Constants;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
...@@ -17,6 +17,7 @@ import cn.com.founder.arcgislib.common.Variable; ...@@ -17,6 +17,7 @@ import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.utils.ToolUtil; import cn.com.founder.arcgislib.utils.ToolUtil;
import cn.com.founder.arcgislib.zoom.listener.IZoomClickListener; import cn.com.founder.arcgislib.zoom.listener.IZoomClickListener;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
...@@ -31,7 +31,6 @@ import androidx.recyclerview.widget.RecyclerView; ...@@ -31,7 +31,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.minedata.minenavi.common.OkHttp3Utils;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
...@@ -46,11 +45,11 @@ import java.util.Objects; ...@@ -46,11 +45,11 @@ import java.util.Objects;
import cn.com.founder.arcgislib.R; import cn.com.founder.arcgislib.R;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.constants.Constants; import cn.com.founder.arcgislib.constants.Constants;
import cn.com.founder.arcgislib.location.ArcGisLocation;
import cn.com.founder.arcgislib.model.SearchModel; import cn.com.founder.arcgislib.model.SearchModel;
import cn.com.founder.arcgislib.search.listener.ISearchSelectedListener; import cn.com.founder.arcgislib.search.listener.ISearchSelectedListener;
import cn.com.founder.arcgislib.utils.GsonUtil; import cn.com.founder.arcgislib.utils.GsonUtil;
import cn.com.founder.arcgislib.utils.KeyboardUtil; import cn.com.founder.arcgislib.utils.KeyboardUtil;
import cn.com.founder.arcgislib.utils.OkHttpUtil;
import cn.com.founder.arcgislib.utils.ToolUtil; import cn.com.founder.arcgislib.utils.ToolUtil;
import cn.com.founder.arcgislib.widget.popup.PopupLayout; import cn.com.founder.arcgislib.widget.popup.PopupLayout;
import okhttp3.Call; import okhttp3.Call;
...@@ -75,7 +74,7 @@ public class ArcGisSearchView extends LinearLayout { ...@@ -75,7 +74,7 @@ public class ArcGisSearchView extends LinearLayout {
*/ */
private Context mContext; private Context mContext;
/** /**
* {@link ArcGisLocation} * {@link ArcGisLocationView}
*/ */
private ArcGisLocationView arcGisLocationView; private ArcGisLocationView arcGisLocationView;
/** /**
...@@ -442,7 +441,7 @@ public class ArcGisSearchView extends LinearLayout { ...@@ -442,7 +441,7 @@ public class ArcGisSearchView extends LinearLayout {
} }
String jsonParams = jsonObject.toString(); String jsonParams = jsonObject.toString();
OkHttp3Utils.doPost(Constants.BASE_SEARCH_URL, jsonParams, new Callback() { OkHttpUtil.doPost(Constants.BASE_SEARCH_URL, jsonParams, new Callback() {
@Override @Override
public void onFailure(Call call, IOException e) { public void onFailure(Call call, IOException e) {
disDialog(); disDialog();
...@@ -469,6 +468,7 @@ public class ArcGisSearchView extends LinearLayout { ...@@ -469,6 +468,7 @@ public class ArcGisSearchView extends LinearLayout {
searchModel.setY(jsonObject1.get("y").getAsDouble()); searchModel.setY(jsonObject1.get("y").getAsDouble());
searchModel.setPoiaddress(jsonObject1.get("poiaddress").getAsString()); searchModel.setPoiaddress(jsonObject1.get("poiaddress").getAsString());
searchModel.setPoiname(jsonObject1.get("poiname").getAsString()); searchModel.setPoiname(jsonObject1.get("poiname").getAsString());
searchModel.setPoiData(true);
searchModelList.add(searchModel); searchModelList.add(searchModel);
} }
...@@ -503,7 +503,7 @@ public class ArcGisSearchView extends LinearLayout { ...@@ -503,7 +503,7 @@ public class ArcGisSearchView extends LinearLayout {
* @param keyWord 单位 * @param keyWord 单位
*/ */
private void requestDwData(String keyWord) { private void requestDwData(String keyWord) {
OkHttp3Utils.doPost(Constants.BASE_DW_URL, Objects.requireNonNull(ToolUtil.dongGuanSearchParams(keyWord)), new Callback() { OkHttpUtil.doPost(Constants.BASE_DW_URL, Objects.requireNonNull(ToolUtil.dongGuanSearchParams(keyWord)), new Callback() {
@Override @Override
public void onFailure(Call call, IOException e) { public void onFailure(Call call, IOException e) {
disDialog(); disDialog();
...@@ -531,6 +531,7 @@ public class ArcGisSearchView extends LinearLayout { ...@@ -531,6 +531,7 @@ public class ArcGisSearchView extends LinearLayout {
searchModel.setY(jsonObject1.get("y").getAsDouble()); searchModel.setY(jsonObject1.get("y").getAsDouble());
searchModel.setPoiaddress(jsonObject1.get("dzqc").getAsString()); searchModel.setPoiaddress(jsonObject1.get("dzqc").getAsString());
searchModel.setPoiname(jsonObject1.get("dwcszpmc").getAsString()); searchModel.setPoiname(jsonObject1.get("dwcszpmc").getAsString());
searchModel.setPoiData(false);
searchModelList.add(searchModel); searchModelList.add(searchModel);
} }
...@@ -559,7 +560,7 @@ public class ArcGisSearchView extends LinearLayout { ...@@ -559,7 +560,7 @@ public class ArcGisSearchView extends LinearLayout {
* @param keyWord 房屋 * @param keyWord 房屋
*/ */
private void requestFwData(String keyWord) { private void requestFwData(String keyWord) {
OkHttp3Utils.doPost(Constants.BASE_FW_URL, Objects.requireNonNull(ToolUtil.dongGuanSearchParams(keyWord)), new Callback() { OkHttpUtil.doPost(Constants.BASE_FW_URL, Objects.requireNonNull(ToolUtil.dongGuanSearchParams(keyWord)), new Callback() {
@Override @Override
public void onFailure(Call call, IOException e) { public void onFailure(Call call, IOException e) {
disDialog(); disDialog();
...@@ -587,6 +588,7 @@ public class ArcGisSearchView extends LinearLayout { ...@@ -587,6 +588,7 @@ public class ArcGisSearchView extends LinearLayout {
searchModel.setY(jsonObject1.get("y").getAsDouble()); searchModel.setY(jsonObject1.get("y").getAsDouble());
searchModel.setPoiaddress(jsonObject1.get("dzqc").getAsString()); searchModel.setPoiaddress(jsonObject1.get("dzqc").getAsString());
searchModel.setPoiname(jsonObject1.get("fwmc").getAsString()); searchModel.setPoiname(jsonObject1.get("fwmc").getAsString());
searchModel.setPoiData(false);
searchModelList.add(searchModel); searchModelList.add(searchModel);
} }
...@@ -615,7 +617,7 @@ public class ArcGisSearchView extends LinearLayout { ...@@ -615,7 +617,7 @@ public class ArcGisSearchView extends LinearLayout {
* @param keyWord 地址 * @param keyWord 地址
*/ */
private void requestDzData(String keyWord) { private void requestDzData(String keyWord) {
OkHttp3Utils.doPost(Constants.BASE_DZ_URL, Objects.requireNonNull(ToolUtil.dongGuanSearchParams(keyWord)), new Callback() { OkHttpUtil.doPost(Constants.BASE_DZ_URL, Objects.requireNonNull(ToolUtil.dongGuanSearchParams(keyWord)), new Callback() {
@Override @Override
public void onFailure(Call call, IOException e) { public void onFailure(Call call, IOException e) {
disDialog(); disDialog();
...@@ -643,6 +645,7 @@ public class ArcGisSearchView extends LinearLayout { ...@@ -643,6 +645,7 @@ public class ArcGisSearchView extends LinearLayout {
searchModel.setY(jsonObject1.get("y").getAsDouble()); searchModel.setY(jsonObject1.get("y").getAsDouble());
searchModel.setPoiaddress(jsonObject1.get("dzqc").getAsString()); searchModel.setPoiaddress(jsonObject1.get("dzqc").getAsString());
searchModel.setPoiname(jsonObject1.get("dzxz").getAsString()); searchModel.setPoiname(jsonObject1.get("dzxz").getAsString());
searchModel.setPoiData(false);
searchModelList.add(searchModel); searchModelList.add(searchModel);
} }
......
...@@ -26,6 +26,7 @@ import java.util.Map; ...@@ -26,6 +26,7 @@ import java.util.Map;
import cn.com.founder.arcgislib.view.ArcGisClusterView; import cn.com.founder.arcgislib.view.ArcGisClusterView;
/** /**
* 模拟聚合 * 模拟聚合
*/ */
......
...@@ -27,6 +27,7 @@ import cn.com.founder.arcgislib.R; ...@@ -27,6 +27,7 @@ import cn.com.founder.arcgislib.R;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.utils.ToolUtil; import cn.com.founder.arcgislib.utils.ToolUtil;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
...@@ -16,6 +16,7 @@ import java.util.List; ...@@ -16,6 +16,7 @@ import java.util.List;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.utils.ToolUtil; import cn.com.founder.arcgislib.utils.ToolUtil;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
package cn.com.founder.arcgislib.widget.navi;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.view.View;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
/**
* Bmp供应者
* @Date:2019/1/28
* @Author:wenjianxin
*/
public class BitmapProvider {
public static Bitmap tintBitmap(Bitmap inBitmap , int tintColor) {
if (inBitmap == null) {
return null;
}
Bitmap outBitmap = Bitmap.createBitmap (inBitmap.getWidth(), inBitmap.getHeight() , inBitmap.getConfig());
Canvas canvas = new Canvas(outBitmap);
Paint paint = new Paint();
paint.setColorFilter( new PorterDuffColorFilter(tintColor, PorterDuff.Mode.SRC_IN)) ;
canvas.drawBitmap(inBitmap , 0, 0, paint) ;
return outBitmap ;
}
/**
* 获取图片 (流)
*
* @param reqWidth 要达到的宽
* @param reqHeight 要达到的高
* @return
*/
public static Bitmap decodeBitmapFromStream(InputStream in, int reqWidth, int reqHeight) {
byte[] buff = readStreamToByte(in);
if (null == buff) {
return null;
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(buff, 0, buff.length, options);
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeByteArray(buff, 0, buff.length, options);
}
/**
* 流转换成Byte[]
*
* @param in
* @return
*/
public static byte[] readStreamToByte(InputStream in) {
ByteArrayOutputStream outputStream = null;
byte[] buff = null;
try {
outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = in.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
buff = outputStream.toByteArray();
} catch (Exception e) {
} finally {
if (null != outputStream) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return buff;
}
/**
* 获取要缩放图片的 inSampleSize
*
* @param options
* @param reqWidth 要达到的宽
* @param reqHeight 要达到的高
* @return
*/
public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
int inSampleSize = 1;
int width = options.outWidth;
int height = options.outHeight;
if (height > reqHeight || width > reqWidth) {
int w = width / reqWidth;
int h = height / reqHeight;
if (w > h) {
inSampleSize = Math.round((float) width / (float) reqWidth);
} else {
inSampleSize = Math.round((float) height / (float) reqHeight);
}
}
return inSampleSize;
}
/**
* 以屏幕宽高绘制图片,不会失真
*
* @param bitmap
* @param displayWidth
* @param displayHeight
* @return
*/
public static Bitmap zoomBitmapByWH(Bitmap bitmap, int displayWidth, int displayHeight) {
int bw = bitmap.getWidth();
int bh = bitmap.getHeight();
Bitmap dstBitmap = null;
Bitmap bit = null;
Paint paint = new Paint();
//图片的宽小于屏幕宽或高小于屏幕高
if (bw < displayWidth && bh < displayHeight) {
//图片宽与屏幕宽的比 》1
float w = (float) displayWidth / (float) bw;
//图片高与屏幕高的比 》1
float h = (float) displayHeight / (float) bh;
if (w < h) {
if (displayHeight >= bh * w) {
bit = Bitmap.createScaledBitmap(bitmap, displayWidth, (int) (bh * w), true);
dstBitmap = Bitmap.createBitmap(displayWidth, displayHeight, Bitmap.Config.RGB_565);
Canvas c = new Canvas(dstBitmap);
c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
c.drawBitmap(bit, 0, (displayHeight - (int) (bh * w)) / 2, paint);
bitmap.recycle();
bit.recycle();
return dstBitmap;
} else {
bit = Bitmap.createScaledBitmap(bitmap, (int) (h / w * displayWidth), displayHeight, true);
dstBitmap = Bitmap.createBitmap(displayWidth, displayHeight, Bitmap.Config.RGB_565);
Canvas c = new Canvas(dstBitmap);
c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
c.drawBitmap(bit, (displayWidth - (int) (h / w * displayWidth)) / 2, 0, paint);
bitmap.recycle();
bit.recycle();
return dstBitmap;
}
} else {
if (displayWidth >= bw * h) {
bit = Bitmap.createScaledBitmap(bitmap, (int) (bw * h), displayHeight, true);
dstBitmap = Bitmap.createBitmap(displayWidth, displayHeight, Bitmap.Config.RGB_565);
Canvas c = new Canvas(dstBitmap);
c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
c.drawBitmap(bit, (displayWidth - (int) (bw * h)) / 2, 0, paint);
bitmap.recycle();
bit.recycle();
return dstBitmap;
} else {
bit = Bitmap.createScaledBitmap(bitmap, displayWidth, (int) (w / h * displayHeight), true);
dstBitmap = Bitmap.createBitmap(displayWidth, displayHeight, Bitmap.Config.RGB_565);
Canvas c = new Canvas(dstBitmap);
c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
c.drawBitmap(bit, 0, (displayHeight - (int) (w / h * displayHeight)) / 2, paint);
bitmap.recycle();
bit.recycle();
return dstBitmap;
}
}
} else if (bw < displayWidth && bh > displayHeight) {
float w = (float) displayWidth / (float) bw;
float h = (float) displayHeight / (float) bh;
if (displayWidth >= bw * h) {
bit = Bitmap.createScaledBitmap(bitmap, (int) (bw * h), displayHeight, true);
dstBitmap = Bitmap.createBitmap(displayWidth, displayHeight, Bitmap.Config.RGB_565);
Canvas c = new Canvas(dstBitmap);
c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
c.drawBitmap(bit, (displayWidth - (int) (bw * h)) / 2, 0, paint);
bitmap.recycle();
bit.recycle();
return dstBitmap;
} else {
bit = Bitmap.createScaledBitmap(bitmap, displayWidth, (int) (w / h * displayHeight), true);
dstBitmap = Bitmap.createBitmap(displayWidth, displayHeight, Bitmap.Config.RGB_565);
Canvas c = new Canvas(dstBitmap);
c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
c.drawBitmap(bit, 0, (displayHeight - (int) (w / h * displayHeight)) / 2, paint);
bitmap.recycle();
bit.recycle();
return dstBitmap;
}
} else if (bw > displayWidth && bh < displayHeight) {
float w = (float) displayWidth / (float) bw;
float h = (float) displayHeight / (float) bh;
if (displayHeight >= bh * w) {
bit = Bitmap.createScaledBitmap(bitmap, displayWidth, (int) (bh * w), true);
dstBitmap = Bitmap.createBitmap(displayWidth, displayHeight, Bitmap.Config.RGB_565);
Canvas c = new Canvas(dstBitmap);
c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
c.drawBitmap(bit, 0, (displayHeight - (int) (bh * w)) / 2, paint);
bitmap.recycle();
bit.recycle();
return dstBitmap;
} else {
bit = Bitmap.createScaledBitmap(bitmap, (int) (h / w * displayWidth), displayHeight, true);
dstBitmap = Bitmap.createBitmap(displayWidth, displayHeight, Bitmap.Config.RGB_565);
Canvas c = new Canvas(dstBitmap);
c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
c.drawBitmap(bit, (displayWidth - (int) (h / w * displayWidth)) / 2, 0, paint);
bitmap.recycle();
bit.recycle();
return dstBitmap;
}
} else {
float w = (float) displayWidth / (float) bw;
float h = (float) displayHeight / (float) bh;
if (w > h) {
if (displayWidth >= bw * h) {
bit = Bitmap.createScaledBitmap(bitmap, (int) (bw * h), displayHeight, true);
dstBitmap = Bitmap.createBitmap(displayWidth, displayHeight, Bitmap.Config.RGB_565);
Canvas c = new Canvas(dstBitmap);
c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
c.drawBitmap(bit, (displayWidth - (int) (bw * h)) / 2, 0, paint);
bitmap.recycle();
bit.recycle();
return dstBitmap;
} else {
bit = Bitmap.createScaledBitmap(bitmap, displayWidth, (int) (w / h * displayHeight), true);
dstBitmap = Bitmap.createBitmap(displayWidth, displayHeight, Bitmap.Config.RGB_565);
Canvas c = new Canvas(dstBitmap);
c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
c.drawBitmap(bit, 0, (displayHeight - (int) (w / h * displayHeight)) / 2, paint);
bitmap.recycle();
bit.recycle();
return dstBitmap;
}
} else {
if (displayHeight >= bh * w) {
bit = Bitmap.createScaledBitmap(bitmap, displayWidth, (int) (bh * w), true);
dstBitmap = Bitmap.createBitmap(displayWidth, displayHeight, Bitmap.Config.RGB_565);
Canvas c = new Canvas(dstBitmap);
c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
c.drawBitmap(bit, 0, (displayHeight - (int) (bh * w)) / 2, paint);
bitmap.recycle();
bit.recycle();
return dstBitmap;
} else {
bit = Bitmap.createScaledBitmap(bitmap, (int) (h / w * displayWidth), displayHeight, true);
dstBitmap = Bitmap.createBitmap(displayWidth, displayHeight, Bitmap.Config.RGB_565);
Canvas c = new Canvas(dstBitmap);
c.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
c.drawBitmap(bit, (displayWidth - (int) (h / w * displayWidth)) / 2, 0, paint);
bitmap.recycle();
bit.recycle();
return dstBitmap;
}
}
}
}
/**
* 从服务器取图片
* <p>
* http://bbs.3gstdy.com
*
* @param url
* @return
*/
public static Bitmap getHttpBitmap(String url) {
URL myFileUrl = null;
Bitmap bitmap = null;
try {
myFileUrl = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();
conn.setConnectTimeout(0);
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
public static Bitmap getBitMBitmap(String urlpath) {
Bitmap map = null;
try {
URL url = new URL(urlpath);
URLConnection conn = url.openConnection();
conn.connect();
InputStream in;
in = conn.getInputStream();
map = BitmapFactory.decodeStream(in);
// TODO Auto-generated catch block
} catch (IOException e) {
e.printStackTrace();
}
return map;
}
/* *//*
* 通过layout获取带有序号的dawable sourceId icon资源id arg0 poi序号
*//*
public static Bitmap getMarkerDrawable(Context context , int sourceId, String arg0, int color) {
LayoutInflater mInflater = UIActivity.gCurrentActivity.getLayoutInflater();
View markerView = mInflater.inflate(R.layout.marker, null);
ImageView image = (ImageView) markerView.findViewById(R.id.image);
image.setImageResource(sourceId);
TextView mtv = (TextView) markerView.findViewById(R.id.mText);
mtv.setText(arg0);
mtv.setTextColor(color);
// mtv.setTextSize(size);
markerView.setDrawingCacheEnabled(true);
// 调用下面这个方法非常重要,如果没有调用这个方法,得到的bitmap为null
markerView.measure(
View.MeasureSpec.makeMeasureSpec(DensityUtil.dip2px(context,22), View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(DensityUtil.dip2px(context,30), View.MeasureSpec.EXACTLY));
// 这个方法也非常重要,设置布局的尺寸和位置
markerView.layout(0, 0, markerView.getMeasuredWidth(),
markerView.getMeasuredHeight());
// 获得绘图缓存中的Bitmap
markerView.buildDrawingCache();
Bitmap bitmap = markerView.getDrawingCache();
// Drawable mk = (Drawable) new BitmapDrawable(bitmap);
//
// // Drawable mk = getResources().getDrawable(R.drawable.icon_gcoding);
// // //得到需要标在地图上的资源
// mk.setBounds(0, 0, mk.getIntrinsicWidth(), mk.getIntrinsicHeight());
// return mk;
return bitmap;
}*/
// public static Bitmap getBitMBitmap(String urlpath) {
// Bitmap map = null;
// try {
// HttpURLConnection con = null;
// URL myURL = new URL(urlpath);
// con = (HttpURLConnection) myURL.openConnection();
// // header
// con.setRequestMethod("GET");
// con.setDoInput(true);
// con.setDoOutput(false);
// con.setUseCaches(false);
//
// int respond_code = con.getResponseCode();
// InputStream is = con.getInputStream();
// map = BitmapFactory.decodeStream(is);
//
// } catch (Exception e) {
// e.printStackTrace();
// }
// return map;
// }
public static byte[] compressBitmapQulity60AndSize200K(Bitmap bitMap) {
return compressBitmapByQualityAndSize(bitMap, 60, 200 * 1024);
}
public static byte[] compressBitmapQulity80AndSize500K(Bitmap bitMap) {
return compressBitmapByQualityAndSize(bitMap, 80, 500 * 1024);
}
/**
* 按照 质量和size进行压缩
*
* @param bitMap
* @param quality
* @param size
* @return
*/
public static byte[] compressBitmapByQualityAndSize(Bitmap bitMap, int quality, int size) {
byte[] bitBuff = null;
try {
while (null == bitBuff || bitBuff.length > size) {
quality = quality - 10;
bitBuff = BitmapProvider.bitmapCompress(bitMap, quality);
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return bitBuff;
}
/**
* 压缩图片
*
* @param bitmap
* @param quality 提示到压缩机,0 - 100。0意思体积小的压缩,压缩为马克斯100意义质量。一些格式,如PNG是无损的,将忽略质量设置
* @return
*/
public static byte[] bitmapCompress(Bitmap bitmap, int quality) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] b = null;
try {
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);
b = baos.toByteArray();
} finally {
try {
if (null != baos) {
baos.close();
}
} catch (Exception e) {
}
}
return b;
}
/**
* 拼接图片
* @param firstBitmap
* @param secondBitmap
* @return
*/
public static Bitmap mergeBitmap(Bitmap firstBitmap, Bitmap secondBitmap) {
int width = firstBitmap.getWidth();
int height = (int) ((float) width / secondBitmap.getWidth() * secondBitmap
.getHeight());
float scale = (float) ((float) width / secondBitmap.getWidth());
Bitmap secondBitmap_scale = scaleBitmap(secondBitmap, scale);
Bitmap bitmap = Bitmap.createBitmap(width, firstBitmap.getHeight()
+ height, firstBitmap.getConfig());
Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(firstBitmap, new Matrix(), null);
canvas.drawBitmap(secondBitmap_scale, 0, firstBitmap.getHeight(), null);
return bitmap;
}
/**
* 保存分享图片
*/
private static Bitmap scaleBitmap(Bitmap bitmap, float scale) {
Matrix matrix = new Matrix();
matrix.postScale(scale, scale); // 长和宽放大缩小的比例
Bitmap resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
return resizeBmp;
}
/**
* 截图显示的起点目的地
* 截取invisible的图片
*
* @param width
* @param hight
* @param v
* @return
*/
public static Bitmap getScreenViewBitmap(int width, int hight, View v) {
v.setDrawingCacheEnabled(true);
// this is the important code :)
// Without it the view will have a dimension of 0,0 and the bitmap will be null
v.measure(View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(hight, View.MeasureSpec.AT_MOST));
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
v.buildDrawingCache(true);
Bitmap b = Bitmap.createBitmap(v.getDrawingCache());
v.setDrawingCacheEnabled(false); // clear drawing cache
return b;
}
private static final BitmapFactory.Options sBitmapOptionsCache = new BitmapFactory.Options();
/*public static Bitmap getArtworkQuick(Context context, Uri uri, int w,
int h) {
// NOTE: There is in fact a 1 pixel border on the right side in the
// ImageView
// used to display this drawable. Take it into account now, so we don't
// have to
// scale later.
w -= 1;
ContentResolver res = context.getContentResolver();
// Cursor cursor = res.query(uri, new String[]{}, null, null, null);
// if(cursor == null){
// return null;
// }else {
if (uri != null) {
ParcelFileDescriptor fd = null;
try {
fd = res.openFileDescriptor(uri, "r");
if (fd == null) {
return null;
}
int sampleSize = 1;
// Compute the closest power-of-two scale factor
// and pass that to sBitmapOptionsCache.inSampleSize, which will
// result in faster decoding and better quality
sBitmapOptionsCache.inPreferredConfig = Bitmap.Config.RGB_565;
sBitmapOptionsCache.inDither = false;
sBitmapOptionsCache.inJustDecodeBounds = true;
BitmapFactory.decodeFileDescriptor(fd.getFileDescriptor(),
null, sBitmapOptionsCache);
int nextWidth = sBitmapOptionsCache.outWidth >> 1;
int nextHeight = sBitmapOptionsCache.outHeight >> 1;
while (nextWidth > w && nextHeight > h) {
sampleSize <<= 1;
nextWidth >>= 1;
nextHeight >>= 1;
}
sBitmapOptionsCache.inSampleSize = sampleSize;
sBitmapOptionsCache.inJustDecodeBounds = false;
Bitmap b = BitmapFactory.decodeFileDescriptor(
fd.getFileDescriptor(), null, sBitmapOptionsCache);
if (b != null) {
// finally rescale to exactly the size we need
if (sBitmapOptionsCache.outWidth != w
|| sBitmapOptionsCache.outHeight != h) {
Bitmap tmp = Bitmap.createScaledBitmap(b, w, h, true);
// Bitmap.createScaledBitmap() can return the same
// bitmap
if (tmp != b)
b.recycle();
b = tmp;
}
}
return b;
} catch (FileNotFoundException e) {
} finally {
try {
if (fd != null)
fd.close();
} catch (IOException e) {
}
}
}
return null;
}*/
}
package cn.com.founder.arcgislib.widget.navi;
import android.content.Context;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.StyleSpan;
import android.util.AttributeSet;
import androidx.appcompat.widget.AppCompatTextView;
import java.util.ArrayList;
import java.util.List;
/**
* @Date:2019/1/16
* 特殊字符变色的TextView 富文本
* @Author:wenjianxin
*/
public class ColorTextView extends AppCompatTextView {
public ColorTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* 特殊文字变色
*
* @param text 全部文字
* @param texts 需要特殊显示的字符串数组
* @param color 特殊显示文字颜色
*/
public void setSpecifiedTextsColor(String text, String[] texts, int color) {
SpannableStringBuilder styledText = null;
List<List<Integer>> sTextsStartLists = null;
for (String specifiedTexts : texts) {
if (specifiedTexts == null || specifiedTexts.equals("")) {
continue;
}
if (sTextsStartLists == null){
sTextsStartLists = new ArrayList<List<Integer>>();
}
List<Integer> sTextsStartList = new ArrayList<Integer>();//最后一个字符记录长度
int sTextLength = specifiedTexts.length();
String temp = text;
int lengthFront = 0;//记录被找出后前面的字段的长度
int start = -1;
do {
start = temp.indexOf(specifiedTexts);
if (start != -1) {
start = start + lengthFront;
sTextsStartList.add(start);
lengthFront = start + sTextLength;
temp = text.substring(lengthFront);
}
} while (start != -1);
sTextsStartList.add(sTextLength);
sTextsStartLists.add(sTextsStartList);
}
styledText = new SpannableStringBuilder(text);
if (sTextsStartLists == null){
return;
}
for(List<Integer> sTextsStartList:sTextsStartLists){
int sTextLength = sTextsStartList.get(sTextsStartList.size()-1);
for (int index = 0 ; index< sTextsStartList.size()-1;index++) {
Integer i = sTextsStartList.get(index);
styledText.setSpan(
new ForegroundColorSpan(color),
i,
i + sTextLength,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
if (styledText != null) {
setText(styledText);
}
}
// StyleSpan styleSpan_B = new StyleSpan(Typeface.BOLD);
// StyleSpan styleSpan_I = new StyleSpan(Typeface.ITALIC);
/**
* 特殊文字变色
*
* @param text 全部文字
* @param texts 需要特殊显示的字符串数组
* @param style 特殊显示文字式样
*/
public void setSpecifiedTextsStyleSpan(String text, String[] texts, int style) {
SpannableStringBuilder styledText = null;
List<List<Integer>> sTextsStartLists = null;
for (String specifiedTexts : texts) {
if (specifiedTexts == null || specifiedTexts.equals("")) {
continue;
}
if (sTextsStartLists == null){
sTextsStartLists = new ArrayList<List<Integer>>();
}
List<Integer> sTextsStartList = new ArrayList<Integer>();//最后一个字符记录长度
int sTextLength = specifiedTexts.length();
String temp = text;
int lengthFront = 0;//记录被找出后前面的字段的长度
int start = -1;
do {
start = temp.indexOf(specifiedTexts);
if (start != -1) {
start = start + lengthFront;
sTextsStartList.add(start);
lengthFront = start + sTextLength;
temp = text.substring(lengthFront);
}
} while (start != -1);
sTextsStartList.add(sTextLength);
sTextsStartLists.add(sTextsStartList);
}
styledText = new SpannableStringBuilder(text);
if (sTextsStartLists == null){
return;
}
for(List<Integer> sTextsStartList:sTextsStartLists){
int sTextLength = sTextsStartList.get(sTextsStartList.size()-1);
for (int index = 0 ; index< sTextsStartList.size()-1;index++) {
Integer i = sTextsStartList.get(index);
styledText.setSpan(
new StyleSpan(style),
i,
i + sTextLength,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
if (styledText != null) {
setText(styledText);
}
}
/**
* 特殊字体
*
* @param text 全部文字
* @param texts 需要特殊显示的字符串数组
* @param size 特殊显示文字字体
*/
public void setSpecifiedTextsSize(String text, String[] texts, float size) {
SpannableStringBuilder styledText = null;
List<List<Integer>> sTextsStartLists = null;
for (String specifiedTexts : texts) {
if (specifiedTexts == null || specifiedTexts.equals("")) {
continue;
}
if (sTextsStartLists == null){
sTextsStartLists = new ArrayList<List<Integer>>();
}
List<Integer> sTextsStartList = new ArrayList<Integer>();//最后一个字符记录长度
int sTextLength = specifiedTexts.length();
String temp = text;
int lengthFront = 0;//记录被找出后前面的字段的长度
int start = -1;
do {
start = temp.indexOf(specifiedTexts);
if (start != -1) {
start = start + lengthFront;
sTextsStartList.add(start);
lengthFront = start + sTextLength;
temp = text.substring(lengthFront);
}
} while (start != -1);
sTextsStartList.add(sTextLength);
sTextsStartLists.add(sTextsStartList);
}
styledText = new SpannableStringBuilder(text);
if (sTextsStartLists == null){
return;
}
for(List<Integer> sTextsStartList:sTextsStartLists){
int sTextLength = sTextsStartList.get(sTextsStartList.size()-1);
for (int index = 0 ; index< sTextsStartList.size()-1;index++) {
Integer i = sTextsStartList.get(index);
styledText.setSpan(
new RelativeSizeSpan(size),
i,
i + sTextLength,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
if (styledText != null) {
setText(styledText);
}
}
}
package cn.com.founder.arcgislib.widget.navi;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.annotation.Nullable;
import com.minedata.minenavi.navi.GidPoint;
import cn.com.founder.arcgislib.R;
/**导航放大图板
*/
public class NaviBigMagBand extends LinearLayout {
private Context mContext;
private ImageView magImage;
private ColorTextView info;
private ImageView infoImage;
private TextView title;
private ProgressBar progressBar;
public NaviBigMagBand(Context context) {
super(context);
mContext = context;
init();
}
public NaviBigMagBand(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mContext = context;
init();
}
private void init() {
View view = LayoutInflater.from(mContext).inflate(R.layout.navi_bigmag_band, this,
true);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//防止异常点击
}
});
//放大图
magImage = (ImageView) view.findViewById(R.id.mag_image);
info = (ColorTextView) view.findViewById(R.id.info);
infoImage = (ImageView) view.findViewById(R.id.info_image);
title = (TextView) view.findViewById(R.id.title_name);
progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
}
public void setNaviTextView(String text) {
info.setSpecifiedTextsSize(text, new String[]{"米后","公里后"}, 0.6f);
}
public void setNaviTitleTextView(String roadName) {
title.setText(roadName);
}
public void setInfoImage(int type) {
int src = judgeShowPicture(type);
infoImage.setImageResource(src);
}
public void setImageBitmap(Bitmap bitmap){
magImage.setImageBitmap(bitmap);
}
public void setProgress(int now,int all){
progressBar.setProgress((int) (now*100.0/all));
}
/**
* 判断显示图片
* @param dir
* @return
*/
private int judgeShowPicture(int dir) {
//左前方
if (GidPoint.GPCode.GP_LEFT_H == dir) {
return R.drawable.navi_dir_left_h;
}
//左后方
if (GidPoint.GPCode.GP_LEFT_L == dir) {
return R.drawable.navi_dir_left_l;
}
//左转
if (GidPoint.GPCode.GP_LEFT_M == dir) {
return R.drawable.navi_dir_left_m;
}
//右前方
if (GidPoint.GPCode.GP_RIGHT_H == dir) {
return R.drawable.navi_dir_right_h;
}
//右后方
if (GidPoint.GPCode.GP_RIGHT_L == dir) {
return R.drawable.navi_dir_right_l;
}
//右转
if (GidPoint.GPCode.GP_RIGHT_M == dir) {
return R.drawable.navi_dir_right_m;
}
//直行
if (GidPoint.GPCode.GP_STRAIGHT == dir) {
return R.drawable.navi_dir_straight;
}
//调头
if (GidPoint.GPCode.GP_U_TURN == dir) {
return R.drawable.navi_dir_u_turn;
}
//0, (short) 0 为默认图片
return R.drawable.navi_dir_straight;
}
}
package cn.com.founder.arcgislib.widget.navi;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import cn.com.founder.arcgislib.R;
/**导航中的底部信息板
* @Date:2019/1/28
* @Author:wenjianxin
*/
public class NaviBottomBand extends LinearLayout {
private Context mContext;
private View navi_bottom_info_band,continueNaviLayout, naviTextInfoLayout;//导航信息和继续导航
//导航底部显示距离控件
private TextView mTvRouteInfo;
private TextView mTvEndTime;
private ImageView delete_icon,sound_icon;
private TextView delete_text,sound_text;
public NaviBottomBand(Context context) {
super(context);
mContext = context;
init();
}
public NaviBottomBand(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mContext = context;
init();
}
public NaviBottomBand(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContext = context;
init();
}
private void init() {
View view = LayoutInflater.from(mContext).inflate(R.layout.navi_bottom_info_band, this,
true);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//防止异常点击
}
});
navi_bottom_info_band = findViewById(R.id.navi_bottom_info_band);
continueNaviLayout = view.findViewById(R.id.continueNaviLayout);
continueNaviLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (listing != null) {
listing.onContinue();
}
}
});
naviTextInfoLayout = view.findViewById(R.id.naviTextInfoLayout);
mTvRouteInfo = (TextView) view.findViewById(R.id.tv_navi_route_info);
mTvEndTime = (TextView) view.findViewById(R.id.tv_to_end_time);
delete_icon = (ImageView)view.findViewById(R.id.delete_icon);
sound_icon = (ImageView)view.findViewById(R.id.sound_icon);
delete_text = (TextView) view.findViewById(R.id.delete_text);
sound_text = (TextView) view.findViewById(R.id.sound_text);
view.findViewById(R.id.btn_nav_exit).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (listing != null) {
listing.onClose();
}
}
});
view.findViewById(R.id.sound_button).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (listing != null) {
listing.onSound();
}
}
});
}
public void setNaviContent(String s, String s1){
mTvRouteInfo.setText(s);
mTvEndTime.setText(s1);
}
public void setBandLockState(boolean isLock){
if (isLock){
continueNaviLayout.setVisibility(View.GONE);
naviTextInfoLayout.setVisibility(View.VISIBLE);
}else {
continueNaviLayout.setVisibility(View.VISIBLE);
naviTextInfoLayout.setVisibility(View.GONE);
}
}
private OnNaviBottomListing listing;
public void setListing(OnNaviBottomListing mlisting){
listing = mlisting;
}
public interface OnNaviBottomListing{
void onSound();
void onClose();
void onContinue();
}
}
package cn.com.founder.arcgislib.widget.navi;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import com.minedata.minenavi.navi.GidPoint;
import cn.com.founder.arcgislib.R;
/**
* 导航标指示板
* Created by qiaobin on 2018/1/15.
*/
@SuppressLint("AppCompatCustomView")
public class NaviGidPointBand extends ImageView {
public NaviGidPointBand(Context context) {
super(context);
}
public NaviGidPointBand(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public NaviGidPointBand(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
/**
* 导航指示板数据设置
*
* @param type 类型
* @param dir 方向
*/
public void setNaviGidPointData(int type, int dir) {
//根据方向和类型做判断显示样式,类型优先
//判断显示图片
int picID = judgeShowPicture(type, dir);
setImageResource(picID);
}
/**
* 判断显示图片
*
* @param type
* @param dir
* @return
*/
private int judgeShowPicture(int type, int dir) {
int icon = 0;
switch (type) {
case GidPoint.GPCode.GP_DEST://目的地
icon = R.drawable.navi_type_dest;
break;
case GidPoint.GPCode.GP_SA_RA://环岛
icon = R.drawable.navi_type_ra;
break;
case GidPoint.GPCode.GP_TOLL_GATE://收费站
icon = R.drawable.navi_type_gate;
break;
case GidPoint.GPCode.GP_TUNNEL://隧道
icon = R.drawable.navi_type_tunnel;
break;
}
switch (dir) {
case GidPoint.GPCode.GP_LEFT_H://左前方
icon = R.drawable.navi_dir_left_h;
break;
case GidPoint.GPCode.GP_LEFT_L://左后方
icon = R.drawable.navi_dir_left_l;
break;
case GidPoint.GPCode.GP_LEFT_M://左转
icon = R.drawable.navi_dir_left_m;
break;
case GidPoint.GPCode.GP_RIGHT_H:
icon = R.drawable.navi_dir_right_h;
break;
case GidPoint.GPCode.GP_RIGHT_L:
icon = R.drawable.navi_dir_right_l;
break;
case GidPoint.GPCode.GP_RIGHT_M:
icon = R.drawable.navi_dir_right_m;
break;
case GidPoint.GPCode.GP_STRAIGHT:
icon = R.drawable.navi_dir_straight;
break;
case GidPoint.GPCode.GP_U_TURN:
icon = R.drawable.navi_dir_u_turn;
break;
}
//0, 为默认图片
if (icon == 0) {
icon = R.drawable.navi_dir_straight;
}
return icon;
}
}
package cn.com.founder.arcgislib.widget.navi;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import cn.com.founder.arcgislib.R;
/**导航信息板
* @Date:2019/1/28
* @Author:wenjianxin
*/
public class NaviIndicatorBand extends LinearLayout {
private Context mContext;
private NaviGidPointBand mNavigationMark;
private View backBand;
private ColorTextView mNaviSpaceTextView;
// private TextView tv_navi_space_danwei;
private TextView textState,mNaviAddressTextView;
private TextView gps_accuracy_text;
private ImageView gps_accuracy_icon;
private ImageView sound_button;
public NaviIndicatorBand(Context context) {
super(context);
mContext = context;
init();
}
public NaviIndicatorBand(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
mContext = context;
init();
}
private void init() {
View view = LayoutInflater.from(mContext).inflate(R.layout.navi_indicator_band, this,
true);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//防止异常点击
}
});
backBand = view.findViewById(R.id.backBand);
//导航标
mNavigationMark = (NaviGidPointBand) view.findViewById(R.id.image);
// 导航路口剩余距离
mNaviSpaceTextView = (ColorTextView) view.findViewById(R.id.tv_navi_space);
textState = (TextView) view.findViewById(R.id.textState);
// 导航路线名称
mNaviAddressTextView = (TextView) view.findViewById(R.id.tv_navi_address);
// tv_navi_space_danwei = (TextView) view.findViewById(R.id.tv_navi_space_danwei);
// 导航距离进度条
gps_accuracy_text = (TextView) view.findViewById(R.id.gps_accuracy_text);
gps_accuracy_icon = (ImageView) view.findViewById(R.id.gps_accuracy_icon);
sound_button = (ImageView) view.findViewById(R.id.sound_state);
sound_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (isOff == false && listing != null){
listing.playSound();
}
}
});
setGpsAccuracyHigh(false);
}
public void setGpsAccuracyHigh(boolean flag){
if (flag){
gps_accuracy_text.setText("强");
gps_accuracy_text.setTextColor(ContextCompat.getColor(mContext,R.color.red));
Bitmap mBitmapBus = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.icon_gps_accuracy);
gps_accuracy_icon.setImageBitmap(BitmapProvider.tintBitmap(mBitmapBus, ContextCompat.getColor(mContext,R.color.gps_accuracy_big)));
// gps_accuracy_icon.set
}else {
gps_accuracy_text.setText("弱");
gps_accuracy_text.setTextColor(ContextCompat.getColor(mContext,R.color.gps_accuracy_small));
Bitmap mBitmapBus = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.icon_gps_accuracy);
gps_accuracy_icon.setImageBitmap(BitmapProvider.tintBitmap(mBitmapBus, ContextCompat.getColor(mContext,R.color.gps_accuracy_small)));
}
}
public void setNaviSpaceTextView(String text) {
mNaviSpaceTextView.setSpecifiedTextsSize(text, new String[]{"米后","公里后"}, 0.6f);
}
public void setNaviAddressTextView(String roadName) {
mNaviAddressTextView.setText(roadName);
}
public void setNaviMarkSrc(int type, int dir) {
mNavigationMark.setNaviGidPointData(type,dir);
}
private boolean isOff = false;
public void setSoundOff(boolean isOff){
this.isOff = isOff;
if (isOff== true){
sound_button.setImageResource(R.drawable.icon_sound_off_white);
}else {
sound_button.setImageResource(R.drawable.icon_sound_on);
}
}
private OnNaviIndicatorListing listing;
public void setListing(OnNaviIndicatorListing listing){
this.listing = listing;
}
public interface OnNaviIndicatorListing{
void playSound();
}
}
package cn.com.founder.arcgislib.widget.navi;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import cn.com.founder.arcgislib.R;
/** 服务区显示板
* @Date:2019/1/28
* @Author:wenjianxin
*/
public class NaviSABand extends RelativeLayout {
private Context mContext;
private TextView dis1,dis2,sa1Name;
private View saBand1,saBand2;
public NaviSABand(Context context) {
super(context);
mContext = context;
init();
}
public NaviSABand(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
init();
}
private void init() {
View view = LayoutInflater.from(mContext).inflate(R.layout.navi_sa_band, this,
true);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//防止异常点击
}
});
//距离
dis1 = (TextView) view.findViewById(R.id.dis1);
dis2 = (TextView) view.findViewById(R.id.dis2);
sa1Name = (TextView) view.findViewById(R.id.saName1);
saBand2 = view.findViewById(R.id.saLayout2);
saBand1 = view.findViewById(R.id.saLayout1);
saBand1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (listing !=null){
listing.onClick(0);
}
}
});
saBand2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (listing !=null){
listing.onClick(1);
}
}
});
}
public void setDis1TextView(String str) {
this.dis1.setText(str);
}
public void setDis2TextView(String str) {
this.dis2.setText(str);
}
public void setSa1NameTextView(String str) {
this.sa1Name.setText(str);
}
public void setSa2Show(){
this.saBand2.setVisibility(VISIBLE);
}
public void setSa2hite(){
this.saBand2.setVisibility(GONE);
}
private OnNaviSaBandListing listing;
public void setListing(OnNaviSaBandListing mlisting){
listing = mlisting;
}
public interface OnNaviSaBandListing{
void onClick(int i);
}
}
package cn.com.founder.arcgislib.widget.navi;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
import android.widget.RemoteViews;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.minedata.minenavi.common.TmcStatus;
import com.minedata.minenavi.navi.TmcBarSection;
import java.util.List;
import cn.com.founder.arcgislib.R;
/**
* @Date:2019/1/28
* @Author:wenjianxin
*/
@RemoteViews.RemoteView
public class TrafficBarView extends View {
private Context context;
private Paint mPaint;
private Paint mPaintPass;
private List<TmcBarSection> tmcBarSections;
private boolean isHorizontal = true;//水平的
float lastEnd = 0;
int moveTop = 0;
private int width;
private int height;
int earthLength = 0;//蚯蚓个数
private float passDis = 0;
public TrafficBarView(Context context) {
super(context);
this.context = context;
}
public TrafficBarView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
public void setHorizontal(boolean flag){
this.isHorizontal = flag;
if (this.isHorizontal){
lastEnd = 0;
}else {
lastEnd = this.height;
}
}
public void setHeight(int height) {
this.height = height;
}
public void setWidth(int width) {
this.width = width;
}
public void setPassDis(long passDis) {
this.passDis = passDis;
if (this.passDis > 1){
this.passDis = 1;
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//按百分比描画
if (mPaint == null) {
mPaint = new Paint();
}
if (mPaintPass == null){
mPaintPass = new Paint();
mPaintPass.setColor(ContextCompat.getColor(context, R.color.bar_pass_color));
}
if (tmcBarSections == null || tmcBarSections.size()<=0){
return;
}
//先全画绿填补
mPaint.setColor(ContextCompat.getColor(context, R.color.bar_mask_tmc_1));// 绿
//TMCbar核心算法
if (isHorizontal) {
canvas.drawRect(new RectF(0, 0 + moveTop, width, height + moveTop), mPaint);
} else {
canvas.drawRect(new RectF(0,0,width,lastEnd), mPaint);
}
earthLength = tmcBarSections.size();
for (int i = 0; i < tmcBarSections.size(); i++) {
TmcBarSection one = tmcBarSections.get(i);
switch (one.tmcStatus) {
case TmcStatus.TMC_STATUS_HEAVY://拥堵
mPaint.setColor(ContextCompat.getColor(context, R.color.bar_mask_tmc_3));// 红
break;
case TmcStatus.TMC_STATUS_SLOW://缓慢
mPaint.setColor(ContextCompat.getColor(context, R.color.bar_mask_tmc_2));// 黄
break;
case TmcStatus.TMC_STATUS_FREE://顺畅
mPaint.setColor(ContextCompat.getColor(context, R.color.bar_mask_tmc_1));// 绿
break;
default:
mPaint.setColor(ContextCompat.getColor(context, R.color.bar_mask_tmc_1));// 绿
//TODO 填补
// mPaint.setColor(ContextCompat.getColor(context, R.color.mask_tmc_no));// 没路况
break;
}
//TMCbar核心算法
if (isHorizontal) {
canvas.drawRect(new RectF(lastEnd, 0 + moveTop
, earthLength != 0 ? lastEnd + width * one.percent : width
, height + moveTop), mPaint);
lastEnd = earthLength != 0 ? lastEnd + width * one.percent : width ;
} else {
canvas.drawRect(new RectF(0,earthLength != 0 ? lastEnd - height * one.percent : 0,width,lastEnd), mPaint);
lastEnd = earthLength != 0 ? lastEnd - height * one.percent : 0 ;
}
}
if (isHorizontal){
lastEnd = 0;
}else {
lastEnd = height;
}
//经过的路径
if (isHorizontal) {
canvas.drawRect(new RectF(0, 0 + moveTop, passDis != 0 ? width * passDis : 0
, height + moveTop), mPaintPass);
} else {
canvas.drawRect(new RectF(0, passDis != 0 ? height - height * passDis : height, width, height), mPaintPass);
}
}
@SuppressLint("HandlerLeak")
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 100:
invalidate();
break;
}
}
};
public void setTrafficBean(List<TmcBarSection> earthlist) {
this.tmcBarSections = earthlist;
//描画
Message msg = new Message();
msg.what = 100;
handler.sendMessage(msg);
}
public void invalidateBar() {
//描画
Message msg = new Message();
msg.what = 100;
handler.sendMessage(msg);
}
}
...@@ -14,6 +14,7 @@ import androidx.annotation.Nullable; ...@@ -14,6 +14,7 @@ import androidx.annotation.Nullable;
import cn.com.founder.arcgislib.R; import cn.com.founder.arcgislib.R;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
......
package cn.com.founder.arcgislib.zoom; package cn.com.founder.arcgislib.zoom;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.view.ArcGisMapZoomView; import cn.com.founder.arcgislib.view.ArcGisMapZoomView;
import cn.com.founder.arcgislib.zoom.listener.IZoomClickListener; import cn.com.founder.arcgislib.zoom.listener.IZoomClickListener;
......
package cn.com.founder.arcgislib.zoom.option; package cn.com.founder.arcgislib.zoom.option;
import cn.com.founder.arcgislib.common.Variable; import cn.com.founder.arcgislib.common.Variable;
import cn.com.founder.arcgislib.zoom.listener.IZoomClickListener; import cn.com.founder.arcgislib.zoom.listener.IZoomClickListener;
......
<?xml version="1.0" encoding="UTF-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 填充的颜色 -->
<solid android:color="@color/colorWhite" />
<!-- 设置按钮的四个角为弧形 -->
<!-- android:radius 弧形的半径 -->
<corners android:radius="10dp" />
<!-- padding:Button里面的文字与Button边界的间隔 -->
<padding
android:top="3dp"
android:bottom="3dp"
/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<corners android:radius="4dp" />
<solid android:color="@color/divide_view_color" />
<!--<stroke-->
<!--android:width="1px"-->
<!--android:color="#b9b9b9" />-->
<padding android:left="1dp"
android:top="1dp"
android:right="1dp"
android:bottom="1dp"/>
</shape>
</item>
<item android:state_pressed="false">
<shape>
<corners android:radius="4dp" />
<solid android:color="@color/white" />
<!--<stroke-->
<!--android:width="1px"-->
<!--android:color="#b9b9b9" />-->
<padding android:left="1dp"
android:top="1dp"
android:right="1dp"
android:bottom="1dp"/>
</shape>
</item>
</selector>
\ 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">
<!-- 填充的颜色 -->
<solid android:color="#d5283443" />
<!-- 设置按钮的四个角为弧形 -->
<!-- android:radius 弧形的半径 -->
<corners android:radius="10dp" />
<!-- padding:Button里面的文字与Button边界的间隔 -->
<padding
android:top="3dp"
android:bottom="3dp"
/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<gradient
android:startColor="#464646"
android:centerColor="#000000"
android:centerY="0.5"
android:endColor="#464646"
android:angle="270"
/>
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<gradient
android:startColor="#00c4b0"
android:centerColor="#00b2a0"
android:centerY="0.5"
android:endColor="#00b2a0"
android:angle="270"
/>
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<gradient
android:startColor="#00c4b0"
android:centerColor="#00b2a0"
android:centerY="0.5"
android:endColor="#00b2a0"
android:angle="270"
/>
</shape>
</clip>
</item>
</layer-list>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<padding android:bottom="3dp" android:left="3dp" android:right="3dp" android:top="3dp" />
<stroke android:width="3dp" android:color="#3285ff" />
<solid android:color="@color/white" />
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<padding android:bottom="3dp" android:left="3dp" android:right="3dp" android:top="3dp" />
<stroke android:width="3dp" android:color="#ff0e02" />
<solid android:color="@color/white" />
</shape>
</item>
</selector>
\ 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="oval">
<solid android:color="@color/white"/>
<!--<padding android:left="3dp"-->
<!--android:top="3dp"-->
<!--android:right="3dp"-->
<!--android:bottom="3dp"/>-->
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<!--5度圆角矩形-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="4dp" />
<solid android:color="@color/sa_color" />
<!--<stroke-->
<!--android:width="1dp"-->
<!--android:color="@color/main_colors" />-->
<padding android:left="1dp"
android:top="1dp"
android:right="1dp"
android:bottom="1dp"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<!--5度圆角矩形-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="4dp" />
<!--<solid android:color="@color/white" />-->
<stroke
android:width="1dp"
android:color="@color/white" />
<padding android:left="1dp"
android:top="1dp"
android:right="1dp"
android:bottom="1dp"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<!--5度圆角矩形-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<corners android:radius="4dp" />
<stroke
android:width="1dp"
android:color="@color/white" />
</shape>
</item>
<item
android:left="1dp"
android:right="1dp"
android:top="1dp">
<shape>
<corners android:topLeftRadius="4dp"
android:topRightRadius="4dp"/>
<solid android:color="@color/sa_color"/>
<padding android:left="1dp"
android:top="1dp"
android:right="1dp"
android:bottom="1dp"/>
</shape>
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<!--5度圆角矩形-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="4dp" />
<solid android:color="#4f93fe" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<corners android:radius="50dp" />
<stroke
android:width="4dp"
android:color="@color/white" />
</shape>
</item>
<item
android:bottom="3dp"
android:left="3dp"
android:right="3dp"
android:top="3dp">
<shape>
<corners android:radius="50dp" />
<stroke
android:width="2px"
android:color="#ffffff" />
</shape>
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
style="@style/WrapContent.WidthMatchParent"
android:background="@color/white">
<TextView
style="@style/WrapContent.WidthMatchParent"
android:gravity="left"
android:text="提示"
android:textSize="@dimen/dimen_font_18sp"
android:textColor="@color/black"
android:padding="@dimen/dimen_block_10" />
<TextView
android:id="@+id/dialog_text_msg_tv"
style="@style/WrapContent.WidthMatchParent"
android:text="djclkdajnfclkdsmcl;kdsamc"
android:textSize="@dimen/dimen_font_16sp"
android:textColor="@color/color_333333"
android:padding="@dimen/dimen_block_20" />
<View
android:layout_width="match_parent"
android:layout_height="0.5dip"
android:background="@color/color_CCCCCC" />
<Button
android:id="@+id/dialog_text_ok_bt"
style="@style/WrapContent.WidthMatchParent"
android:textColor="@color/color_13227A"
android:text="确定"
android:textSize="@dimen/dimen_font_16sp"
android:background="@color/white" />
</LinearLayout>
\ No newline at end of file
...@@ -126,6 +126,7 @@ ...@@ -126,6 +126,7 @@
android:paddingTop="@dimen/dimen_block_10" android:paddingTop="@dimen/dimen_block_10"
android:paddingBottom="@dimen/dimen_block_10" android:paddingBottom="@dimen/dimen_block_10"
android:focusable="true" android:focusable="true"
android:clickable="true" /> android:clickable="true"
/>
</LinearLayout> </LinearLayout>
\ No newline at end of file
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/constraintLayout_paint"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
>
<!--导航内容上部板-->
<RelativeLayout
android:id="@+id/naviTop"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<!--导航指示板-->
<cn.com.founder.arcgislib.widget.navi.NaviIndicatorBand
android:id="@+id/naviIndicatorBand"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:translationZ="3dp"
android:visibility="visible" />
<!--路况放大图-->
<cn.com.founder.arcgislib.widget.navi.NaviBigMagBand
android:id="@+id/naviBigMagBand"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:translationZ="3dp"
android:visibility="gone" />
</RelativeLayout>
<ImageView
android:id="@+id/naviLandBand"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_marginTop="3dp"
android:background="@drawable/navi_square_shape_4_blue"
android:gravity="center"
android:orientation="horizontal"
android:translationZ="3dp"
android:visibility="gone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/naviTop" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/eyeBand"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="3dp"
android:background="@drawable/navi_round_red_white"
android:translationZ="3dp"
android:visibility="gone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/naviTop">
<ImageView
android:id="@+id/eyeImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon_eye_light_big"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/eyeSpeed"
android:layout_width="0dp"
android:layout_height="0dp"
android:gravity="center"
android:lines="1"
android:paddingTop="2dp"
android:text="20"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<!--导航底部布局-->
<cn.com.founder.arcgislib.widget.navi.NaviBottomBand
android:id="@+id/ll_navi_bottom_info_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:translationZ="3dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
<LinearLayout
android:id="@+id/ll_demo_navi_bottom_info_text"
android:layout_width="0dp"
android:layout_height="62dp"
android:layout_margin="10dp"
android:background="@drawable/navi_btn_bottom_content_shape"
android:gravity="center"
android:orientation="horizontal"
android:translationZ="3dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent">
<TextView
android:id="@+id/demoStop"
android:layout_width="60dp"
android:layout_height="match_parent"
android:gravity="center"
android:paddingTop="2dp"
android:text="退出" />
<View
android:layout_width="1px"
android:layout_height="34dp"
android:background="@color/divide_line_color" />
<TextView
android:id="@+id/demoSpeed"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="10dp"
android:layout_weight="1"
android:gravity="center"
android:paddingRight="5dp"
android:text="低速" />
<View
android:layout_width="1px"
android:layout_height="34dp"
android:background="@color/divide_line_color" />
<TextView
android:id="@+id/demoPause"
android:layout_width="60dp"
android:layout_height="match_parent"
android:gravity="center"
android:paddingTop="2dp"
android:text="暂停" />
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/carSpeedBand"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="5dp"
android:layout_marginBottom="50dp"
android:background="@drawable/navi_round_darkblue_white"
android:translationZ="3dp"
android:visibility="visible"
app:layout_constraintBottom_toTopOf="@+id/ll_navi_bottom_info_text"
app:layout_constraintLeft_toLeftOf="parent">
<TextView
android:id="@+id/speedDw"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingBottom="6dp"
android:text="km/h"
android:textColor="#3285ff"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
<TextView
android:id="@+id/speed"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="bottom|center_horizontal"
android:lines="1"
android:paddingTop="2dp"
android:text="0"
android:textColor="#3285ff"
app:layout_constraintBottom_toTopOf="@+id/speedDw"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<cn.com.founder.arcgislib.widget.navi.NaviSABand
android:id="@+id/naviSABand"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginBottom="5dp"
android:translationZ="3dp"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/carSpeedBand"
app:layout_constraintLeft_toLeftOf="parent" />
<TextView
android:id="@+id/nowRoute"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:background="@drawable/navi_common_bg_shape4"
android:gravity="center"
android:padding="8dp"
android:text="浑南西路"
android:textSize="20dp"
android:translationZ="3dp"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/ll_navi_bottom_info_text"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
<RelativeLayout
android:id="@+id/trafficBarLayout"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginTop="110dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="5dp"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/ll_navi_bottom_info_text"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<cn.com.founder.arcgislib.widget.navi.TrafficBarView
android:id="@+id/trafficBarView"
android:layout_width="12dp"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_marginTop="3dp"
android:layout_marginBottom="34dp" />
<ImageView
android:id="@+id/today_trafficBar_kuang"
android:layout_width="16dp"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_marginBottom="31dp"
android:scaleType="fitXY"
android:src="@drawable/navi_tmc_bar_kuang" />
<ImageView
android:id="@+id/carUp"
android:layout_width="21dp"
android:layout_height="21dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginLeft="2dp"
android:layout_marginRight="2dp"
android:background="@drawable/navi_round_white"
android:padding="4dp"
android:rotation="180"
android:src="@drawable/icon_route_text_start"
android:translationZ="3dp" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<ProgressBar
android:id="@+id/progressBar"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:max="100"
android:maxHeight="40dp"
android:minHeight="40dp"
android:progressDrawable="@drawable/navi_m_progress_horizontal"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
<LinearLayout
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="40dp"
android:gravity="bottom"
android:paddingBottom="5dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
>
<cn.com.founder.arcgislib.widget.navi.ColorTextView
android:id="@+id/info"
android:layout_marginStart="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="164米后"
/>
<ImageView
android:id="@+id/info_image"
android:layout_width="20dp"
android:paddingLeft="2dp"
android:layout_height="30dp"
android:scaleType="centerInside"
android:src="@drawable/navi_dir_u_turn"/>
<TextView
android:text="进入"
android:paddingLeft="4dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/title_name"
android:paddingLeft="4dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<ImageView
android:id="@+id/mag_image"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/title"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:srcCompat="@drawable/navi_arrow_bottom" />
</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navi_bottom_info_band"
android:layout_width="match_parent"
android:layout_height="62dp"
android:layout_margin="10dp"
android:background="@drawable/btn_bottom_nav_content_shape"
android:gravity="center"
android:orientation="horizontal"
android:translationZ="3dp">
<LinearLayout
android:id="@+id/btn_nav_exit"
android:layout_width="60dp"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/delete_icon"
android:layout_width="12dp"
android:layout_height="12dp"
android:src="@drawable/icon_delete_icon" />
<TextView
android:id="@+id/delete_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="2dp"
android:text="退出" />
</LinearLayout>
<View
android:layout_width="1px"
android:layout_height="34dp"
android:background="@color/divide_line_color" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/naviTextInfoLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:visibility="visible">
<TextView
android:id="@+id/tv_navi_route_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="剩余3.2公里 9分钟"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="MissingConstraints" />
<TextView
android:id="@+id/tv_to_end_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:text="09:22到达"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_navi_route_info" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/continueNaviLayout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:visibility="gone">
<TextView
android:textColor="@color/blue"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_weight="1"
android:gravity="right"
android:paddingRight="5dp"
android:text="继续当前导航"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:layout_width="1px"
android:layout_height="34dp"
android:background="@color/divide_line_color" />
<LinearLayout
android:id="@+id/sound_button"
android:layout_width="60dp"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/sound_icon"
android:layout_width="12dp"
android:layout_height="12dp"
android:src="@drawable/icon_sound_black" />
<TextView
android:id="@+id/sound_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="2dp"
android:text="语音" />
</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"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ll_online_expand_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:orientation="vertical"
android:visibility="visible">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/backBand"
android:layout_width="match_parent"
android:layout_height="110dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:background="@drawable/navi_icon_distance_shape"
android:gravity="center_vertical"
android:orientation="horizontal">
<cn.com.founder.arcgislib.widget.navi.NaviGidPointBand
android:id="@+id/image"
android:layout_width="56dp"
android:layout_height="match_parent"
android:layout_marginBottom="14dp"
android:layout_marginStart="14dp"
android:layout_marginTop="14dp"
android:scaleType="centerInside"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/linearLayout"
app:layout_constraintStart_toEndOf="@+id/image"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<cn.com.founder.arcgislib.widget.navi.ColorTextView
android:id="@+id/tv_navi_space"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal"
android:singleLine="true"
android:text="55"
android:textSize="40dp" />
<TextView
android:id="@+id/textState"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text="进入"
android:textColor="#838f9e" />
</LinearLayout>
<TextView
android:id="@+id/tv_navi_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal"
android:singleLine="true"
android:text="最近目标距离"
android:textColor="@color/white" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="19dp"
android:layout_marginTop="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/gps_accuracy_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="4dp"
android:text="强" />
<ImageView
android:id="@+id/gps_accuracy_icon"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/icon_gps_accuracy" />
</LinearLayout>
<ImageView
android:id="@+id/sound_state"
android:layout_width="60dp"
android:layout_height="60dp"
android:padding="15dp"
android:src="@drawable/icon_sound_on"
android:layout_marginRight="5dp"
app:layout_constraintTop_toBottomOf="@+id/linearLayout"
app:layout_constraintRight_toRightOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:background="@drawable/navi_shape_sa_bg">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/saLayout1"
android:layout_width="110dp"
android:layout_height="60dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:background="@drawable/navi_shape_sa_kuang_bg">
<ImageView
android:id="@+id/saImage1"
android:layout_width="25dp"
android:layout_height="30dp"
android:layout_marginLeft="4dp"
android:layout_marginTop="4dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/navi_sa_icon" />
<TextView
android:id="@+id/saName1"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:gravity="center"
android:layout_marginStart="8dp"
android:text="高花"
android:layout_marginTop="2dp"
android:textColor="@color/white"
app:layout_constraintBottom_toTopOf="@+id/dis1TextLayout"
app:layout_constraintStart_toEndOf="@+id/saImage1"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/dis1TextLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="4dp"
app:layout_constraintEnd_toEndOf="parent">
<TextView
android:id="@+id/dis1"
android:textColor="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:text="50.6" />
<TextView
android:id="@+id/disDw1"
android:textColor="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:text="km"
android:textSize="11dp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/saLayout2"
android:layout_width="110dp"
android:layout_height="40dp"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/saLayout1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:background="@drawable/navi_shape_sa_kuang_half_bg"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/saImage2"
android:layout_width="25dp"
android:layout_height="30dp"
android:layout_marginLeft="4dp"
android:layout_marginTop="4dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:srcCompat="@drawable/navi_sa_icon" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/dis2"
android:textColor="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:text="50.6" />
<TextView
android:id="@+id/disDw2"
android:textColor="@color/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="4dp"
android:text="km"
android:textSize="11dp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<paths>
<external-path
name="arcgis_lib_file_name"
path=""/>
<files-path
name="arcgis_lib_file_name"
path=""/>
<cache-path
name="arcgis_lib_file_name"
path=""/>
<root-path
name="arcgis_lib_file_name"/>
</paths>
</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