Commit 6d4d2c2f by Luosp

增加聚合样式

parent 14af1553
...@@ -16,7 +16,9 @@ ...@@ -16,7 +16,9 @@
android:requestLegacyExternalStorage="true" android:requestLegacyExternalStorage="true"
tools:ignore="GoogleAppIndexingWarning" tools:ignore="GoogleAppIndexingWarning"
tools:targetApi="q"> tools:targetApi="q">
<activity android:name=".MainActivity"> <activity android:name=".MainActivity"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
>
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
......
...@@ -3,6 +3,7 @@ package cn.com.founder.arcgisserver; ...@@ -3,6 +3,7 @@ package cn.com.founder.arcgisserver;
import android.graphics.Color; import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.Button;
import android.widget.Toast; import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
...@@ -11,30 +12,44 @@ import java.util.ArrayList; ...@@ -11,30 +12,44 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import cn.com.founder.arcgislib.ArcGisFounder; import cn.com.founder.arcgislib.ArcGisFounder;
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.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.model.SearchModel;
import cn.com.founder.arcgislib.search.listener.ISearchSelectedListener;
import cn.com.founder.arcgislib.search.option.IArcGisSearchOption;
import cn.com.founder.arcgislib.view.ArcGisBaseView; import cn.com.founder.arcgislib.view.ArcGisBaseView;
import cn.com.founder.arcgislib.view.ArcGisClusterView;
import cn.com.founder.arcgislib.zoom.listener.IZoomClickListener; import cn.com.founder.arcgislib.zoom.listener.IZoomClickListener;
import cn.com.founder.arcgislib.zoom.option.IArcGisZoomOption; import cn.com.founder.arcgislib.zoom.option.IArcGisZoomOption;
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity {
// private LifecycleRegistry mLifecycleRegistry; // private LifecycleRegistry mLifecycleRegistry;
private ArcGisFounder arcGisFounder;
private Button naviBt;
/**
* @param savedInstanceState
*/
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
naviBt = findViewById(R.id.bt_navi);
ArcGisBaseView arcGisBaseView = findViewById(R.id.main_arc_gis_base_view); ArcGisBaseView arcGisBaseView = findViewById(R.id.main_arc_gis_base_view);
//集成Activity //集成Activity
// mLifecycleRegistry = new LifecycleRegistry(this); // mLifecycleRegistry = new LifecycleRegistry(this);
// mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE); // mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
ArcGisFounder arcGisFounder = ArcGisFounder.with(this)//context initData(arcGisBaseView);
}
private void initData(ArcGisBaseView arcGisBaseView){
arcGisFounder = ArcGisFounder.with(this)//context
.setParentLayout(arcGisBaseView)//设置父布局 .setParentLayout(arcGisBaseView)//设置父布局
.setLifecycle(getLifecycle())//生命周期管理 .setLifecycle(getLifecycle())//生命周期管理
.setBackgroundGridColor(Color.WHITE)//设置地图网格背景色 .setBackgroundGridColor(Color.WHITE)//设置地图网格背景色
...@@ -44,9 +59,9 @@ public class MainActivity extends AppCompatActivity { ...@@ -44,9 +59,9 @@ public class MainActivity extends AppCompatActivity {
.setDefaultArcGisZoom()//设置默认缩放 .setDefaultArcGisZoom()//设置默认缩放
.setDefaultArcGisCompass()//设置默认罗盘 .setDefaultArcGisCompass()//设置默认罗盘
.setOpenNavi()//开启导航 .setOpenNavi()//开启导航
// .setOpenSearch()//开启搜索 .setOpenSearch()//开启搜索
// .setOpenHotPots()//开启热力图 // .setOpenHotPots()//开启热力图
// .setOpenCluster()//开启聚合 .setOpenCluster()//开启聚合
.createArcGisFounder();//创建ArcGisFounder地图实例 .createArcGisFounder();//创建ArcGisFounder地图实例
IArcGisZoomOption iArcGisZoomOption = arcGisFounder.arcGisZoomOption(); IArcGisZoomOption iArcGisZoomOption = arcGisFounder.arcGisZoomOption();
...@@ -65,19 +80,20 @@ public class MainActivity extends AppCompatActivity { ...@@ -65,19 +80,20 @@ public class MainActivity extends AppCompatActivity {
}); });
IArcGisLocationOption iArcGisLocationOption = arcGisFounder.arcGisLocationOption(); IArcGisLocationOption iArcGisLocationOption = arcGisFounder.arcGisLocationOption();
iArcGisLocationOption.setGeoDistance(0.5);
//自动定位;;; //自动定位;;;
// iArcGisLocationOption.startLocation(0); // iArcGisLocationOption.startLocation(0);
//手动定位 //手动定位
iArcGisLocationOption.startLocation(113.75179,23.02067,0); iArcGisLocationOption.startLocation(113.75179,23.02067,0);
//开启TXT导入 //开启TXT导入
iArcGisLocationOption.setShowTXTImportLayout(true); // iArcGisLocationOption.setShowTXTImportLayout(true);
List<PointModel> pointModels = new ArrayList<>(); // List<PointModel> pointModels = new ArrayList<>();
pointModels.add(new PointModel(113.935576,22.995918)); // pointModels.add(new PointModel(113.935576,22.995918));
pointModels.add(new PointModel(113.959722,23.000176)); // pointModels.add(new PointModel(113.959722,23.000176));
pointModels.add(new PointModel(113.97582,22.949069)); // pointModels.add(new PointModel(113.97582,22.949069));
pointModels.add(new PointModel(113.952823,22.916051)); // pointModels.add(new PointModel(113.952823,22.916051));
pointModels.add(new PointModel(114.019513,22.951198)); // pointModels.add(new PointModel(114.019513,22.951198));
iArcGisLocationOption.setImportPointData(pointModels); // iArcGisLocationOption.setImportPointData(pointModels);
//移动地图获取中心点 //移动地图获取中心点
// iArcGisLocationOption.setFollowMapViewPoint(true); // iArcGisLocationOption.setFollowMapViewPoint(true);
//隐藏poi信息 //隐藏poi信息
...@@ -100,8 +116,43 @@ public class MainActivity extends AppCompatActivity { ...@@ -100,8 +116,43 @@ public class MainActivity extends AppCompatActivity {
IArcGisCompassOption iArcGisCompassOption = arcGisFounder.arcGisCompassOption(); IArcGisCompassOption iArcGisCompassOption = arcGisFounder.arcGisCompassOption();
iArcGisCompassOption.setIRotationAngleListener(() -> Toast.makeText(MainActivity.this, "转动结束。。。", Toast.LENGTH_LONG).show()); iArcGisCompassOption.setIRotationAngleListener(() -> Toast.makeText(MainActivity.this, "转动结束。。。", Toast.LENGTH_LONG).show());
// IArcGisClusterOption iArcGisClusterOption = arcGisFounder.arcGisClusterOption(); //放在点击事件中调用或者当页面完全加载完成后调用
// iArcGisClusterOption.setCluseterData(null); naviBt.setOnClickListener(view -> {
// IArcGisNaviOption iArcGisNaviOption = arcGisFounder.arcGisNaviOption();
// PointModel startPoint = new PointModel(113.6242709,22.8810121,"新丽佳百货");
// PointModel endPoint = new PointModel(113.6351135,22.8874085,"大自然花场");
//
// iArcGisNaviOption.setCustomPointNavi(startPoint,endPoint);
//必须开启搜索功能
IArcGisSearchOption iArcGisSearchOption = arcGisFounder.arcGisSearchOption();
iArcGisSearchOption.setSearchData(0, "公安局");
iArcGisSearchOption.setSearchSelectedListener(new ISearchSelectedListener() {
@Override
public void selectedResult(SearchModel searchModel) {
} }
});
});
IArcGisClusterOption iArcGisClusterOption = arcGisFounder.arcGisClusterOption();
ArcGisClusterView.ClusterStyleBuilder clusterStyleBuilder = iArcGisClusterOption.getClusterStyleBuilder();
clusterStyleBuilder.setmClusterCircleBg(R.color.blue);
List<PointModel> pointList = new ArrayList<>();
pointList.add(new PointModel(113.935576,22.995918));
pointList.add(new PointModel(113.959722,23.000176));
pointList.add(new PointModel(113.97582,22.949069));
pointList.add(new PointModel(113.952823,22.916051));
pointList.add(new PointModel(114.019513,22.951198));
iArcGisClusterOption.setCluseterData(pointList);
iArcGisClusterOption.setIClusterPointInfoListener(locationModel -> Toast.makeText(MainActivity.this, "X:" + locationModel.getXPoint()
+ "\nY:" + locationModel.getYPoint()
+ "\n地址:" + locationModel.getAddress()
+ "\nPoi:" + locationModel.getPoi()
+ "\n补充信息:" + locationModel.getExtraInfo()
, Toast.LENGTH_LONG).show());
}
} }
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
...@@ -9,5 +9,10 @@ ...@@ -9,5 +9,10 @@
android:id="@+id/main_arc_gis_base_view" android:id="@+id/main_arc_gis_base_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"/> android:layout_height="match_parent"/>
<Button
android:id="@+id/bt_navi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="导航"/>
</LinearLayout> </FrameLayout>
\ No newline at end of file \ No newline at end of file
...@@ -59,10 +59,9 @@ dependencies { ...@@ -59,10 +59,9 @@ dependencies {
implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.1.0'
//arcgis地图 //arcgis地图
implementation 'com.esri.arcgisruntime:arcgis-android:100.6.0' api 'com.esri.arcgisruntime:arcgis-android:100.6.0'
//权限 //权限
implementation 'com.yanzhenjie:permission:2.0.3' implementation 'com.yanzhenjie:permission:2.0.3'
//导航
implementation 'com.jakewharton.timber:timber:4.5.1' implementation 'com.jakewharton.timber:timber:4.5.1'
implementation 'com.google.code.gson:gson:2.8.5' implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.mapzen.android:lost:2.1.2' implementation 'com.mapzen.android:lost:2.1.2'
......
...@@ -175,6 +175,10 @@ ...@@ -175,6 +175,10 @@
public *; public *;
} }
-keepclassmembers class cn.com.founder.arcgislib.view.ArcGisClusterView$ClusterStyleBuilder{
public *;
}
-keep class cn.com.founder.arcgislib.location.listener.**{ *; } -keep class cn.com.founder.arcgislib.location.listener.**{ *; }
-keep class cn.com.founder.arcgislib.location.option.**{ *; } -keep class cn.com.founder.arcgislib.location.option.**{ *; }
-keep class cn.com.founder.arcgislib.compass.listener.**{ *; } -keep class cn.com.founder.arcgislib.compass.listener.**{ *; }
...@@ -184,20 +188,15 @@ ...@@ -184,20 +188,15 @@
-keep class cn.com.founder.arcgislib.search.listener.**{ *; } -keep class cn.com.founder.arcgislib.search.listener.**{ *; }
-keep class cn.com.founder.arcgislib.search.option.**{ *; } -keep class cn.com.founder.arcgislib.search.option.**{ *; }
-keep class cn.com.founder.arcgislib.navi.option.**{ *; } -keep class cn.com.founder.arcgislib.navi.option.**{ *; }
-keep class cn.com.founder.arcgislib.cluster.listener.**{ *; }
-keep class cn.com.founder.arcgislib.cluster.option.**{ *; } -keep class cn.com.founder.arcgislib.cluster.option.**{ *; }
-keep class cn.com.founder.arcgislib.hotpots.option.**{ *; } -keep class cn.com.founder.arcgislib.hotpots.option.**{ *; }
-keep class cn.com.founder.arcgislib.model.**{ *; } -keep class cn.com.founder.arcgislib.model.**{ *; }
-keep class cn.com.founder.arcgislib.view.**{ *; } -keep class cn.com.founder.arcgislib.view.**{ *; }
-keep class cn.com.founder.arcgislib.widget.**{ *; }
-keep class cn.com.founder.arcgislib.widget.cluster.**{ *; } -keep class cn.com.founder.arcgislib.widget.cluster.**{ *; }
-keep class cn.com.founder.arcgislib.widget.navi.**{ *; } -keep class cn.com.founder.arcgislib.widget.navi.**{ *; }
-keep class cn.com.founder.arcgislib.widget.popup.**{ *; } -keep class cn.com.founder.arcgislib.widget.popup.**{ *; }
-keep class cn.com.founder.arcgislib.widget.scrolllayout.**{ *; }
-keep class cn.com.founder.arcgislib.widget.scrolllayout.content.**{ *; }
-keep class cn.com.founder.arcgislib.widget.scrolllayout{ *; }
-keepclassmembers class cn.com.founder.arcgislib.widget.scrolllayout$Status{
public *;
}
-keep class com.minedata.minenavi.**{ *; } -keep class com.minedata.minenavi.**{ *; }
-dontwarn com.minedata.minenavi.** -dontwarn com.minedata.minenavi.**
......
...@@ -454,7 +454,7 @@ public class ArcGisFounder implements IOption { ...@@ -454,7 +454,7 @@ public class ArcGisFounder implements IOption {
* @return {@link ArcGisClusterView} * @return {@link ArcGisClusterView}
*/ */
ArcGisClusterView getArcGisClusterView() { ArcGisClusterView getArcGisClusterView() {
return new ArcGisClusterView(mArcGisFounderBuilder.mSource.getContext(), mArcGisFounderBuilder.mArcGisMapView); return new ArcGisClusterView(mArcGisFounderBuilder.mSource.getContext(), mArcGisFounderBuilder.mArcGisMapView, mArcGisFounderBuilder.mArcGisLocationView);
} }
} }
......
package cn.com.founder.arcgislib.cluster; package cn.com.founder.arcgislib.cluster;
import com.esri.arcgisruntime.geometry.Point;
import java.util.List; import java.util.List;
import cn.com.founder.arcgislib.cluster.listener.IClusterPointInfoListener;
import cn.com.founder.arcgislib.cluster.option.IArcGisClusterOption; import cn.com.founder.arcgislib.cluster.option.IArcGisClusterOption;
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.view.ArcGisClusterView; import cn.com.founder.arcgislib.view.ArcGisClusterView;
/** /**
...@@ -24,28 +24,70 @@ public class ArcGisCluster implements IArcGisClusterOption { ...@@ -24,28 +24,70 @@ public class ArcGisCluster implements IArcGisClusterOption {
public ArcGisCluster(ArcGisClusterView arcGisClusterView) { public ArcGisCluster(ArcGisClusterView arcGisClusterView) {
this.mArcGisClusterView = arcGisClusterView; this.mArcGisClusterView = arcGisClusterView;
} }
/**
* @param isShow boolean-是否显示聚合布局
* 默认显示
*/
@Override @Override
public IArcGisClusterOption setShowClusterLayout(boolean isShow) { public IArcGisClusterOption setShowClusterLayout(boolean isShow) {
mArcGisClusterView.setShowClusterLayout(isShow); mArcGisClusterView.setShowClusterLayout(isShow);
return this; return this;
} }
/**
* @param location {@link Variable.ViewLocation } ClusterView显示位置
*/
@Override @Override
public IArcGisClusterOption setClusterViewLocation(Variable.ViewLocation location) { public IArcGisClusterOption setClusterViewLocation(Variable.ViewLocation location) {
mArcGisClusterView.setClusterViewLocation(location); mArcGisClusterView.setClusterViewLocation(location);
return this; return this;
} }
/**
* @param clusterImage int(资源ID)-聚合图片
*/
@Override @Override
public IArcGisClusterOption setClusterImage(int clusterImage) { public IArcGisClusterOption setClusterImage(int clusterImage) {
mArcGisClusterView.setClusterImage(clusterImage); mArcGisClusterView.setClusterImage(clusterImage);
return this; return this;
} }
/**
* @param pointList 聚合点集合
*/
@Override @Override
public IArcGisClusterOption setCluseterData(List<Point> pointList) { public IArcGisClusterOption setCluseterData(List<PointModel> pointList) {
mArcGisClusterView.setClusterData(pointList); mArcGisClusterView.setClusterData(pointList);
return this; return this;
} }
@Override
public IArcGisClusterOption setGeoDistance(double distance) {
mArcGisClusterView.setGeoDistance(distance);
return this;
}
@Override
public IArcGisClusterOption setIClusterPointInfoListener(IClusterPointInfoListener clusterPointInfoListener) {
mArcGisClusterView.setIClusterPointInfoListener(clusterPointInfoListener);
return this;
}
/**
* @return 得到聚合样式
*/
@Override
public ArcGisClusterView.ClusterStyleBuilder getClusterStyleBuilder() {
return mArcGisClusterView.getClusterStyleBuilder();
}
@Override
public ArcGisClusterView.CalloutStyleBuilder getCalloutStyleBuilder() {
return mArcGisClusterView.getCalloutStyleBuilder();
}
@Override
public ArcGisClusterView.CalloutContentBuilder getCalloutContentBuilder() {
return mArcGisClusterView.getCalloutContentBuilder();
}
} }
package cn.com.founder.arcgislib.cluster.option; package cn.com.founder.arcgislib.cluster.option;
import com.esri.arcgisruntime.geometry.Point;
import java.util.List; import java.util.List;
import cn.com.founder.arcgislib.cluster.listener.IClusterPointInfoListener;
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.view.ArcGisClusterView;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
...@@ -33,5 +34,32 @@ public interface IArcGisClusterOption { ...@@ -33,5 +34,32 @@ public interface IArcGisClusterOption {
/** /**
* @param pointList 聚合点集合 * @param pointList 聚合点集合
*/ */
IArcGisClusterOption setCluseterData(List<Point> pointList); IArcGisClusterOption setCluseterData(List<PointModel> pointList);
/**
* @param distance 默认逆地理编码距离是0.1,单位是km;
* 需要在最上层调用
*
*/
IArcGisClusterOption setGeoDistance(double distance);
/**
* @param clusterPointInfoListener 设置聚合点信息回调
*/
IArcGisClusterOption setIClusterPointInfoListener(IClusterPointInfoListener clusterPointInfoListener);
/**
* @return 得到聚合样式
*/
ArcGisClusterView.ClusterStyleBuilder getClusterStyleBuilder();
/**
* callout样式
*/
ArcGisClusterView.CalloutStyleBuilder getCalloutStyleBuilder();
/**
* callout内容样式
*/
ArcGisClusterView.CalloutContentBuilder getCalloutContentBuilder();
} }
...@@ -63,6 +63,7 @@ public class Variable { ...@@ -63,6 +63,7 @@ public class Variable {
public static enum SearchType{ public static enum SearchType{
NONE, NONE,
SEARCH, SEARCH,
SEARCH_TYPE_RESULT,
START_ADDRESS_SEARCH, START_ADDRESS_SEARCH,
END_ADDRESS_SEARCH, END_ADDRESS_SEARCH,
} }
......
...@@ -9,37 +9,62 @@ package cn.com.founder.arcgislib.constants; ...@@ -9,37 +9,62 @@ 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
private static String baseGeoUrl = "http://47.92.226.24:8051/selectVdzjx"; private static String baseGeoUrl = "http://68.174.25.107:8090/esBzdzTestQuery";
//互联网-搜索 //互联网-搜索
private static String searchUrl = "http://47.92.226.24:8051/selectPoiDataList"; private static String searchUrl = "http://47.92.226.24:8051/selectPoiDataList";
//互联网-导航 //互联网-导航
private static String naviUrl = "minedata.cn/lbsservice/navi/"; private static String naviUrl = "minedata.cn/lbsservice/navi/";
/**********************************************************************************************/ //二标四实-单位
private static String dwUrl = "http://68.174.69.46:8051/selectVdwjx";
//二标四实-房屋
private static String fwUrl = "http://68.174.69.46:8051/selectVfwjx";
//二标四实-地址
private static String dzUrl = "http://68.174.69.46:8051/selectVdzjx";
/**********************************************************************************************
/*****************************************用户网*********************************************** /*****************************************用户网***********************************************
//如果使用公安局的映射,导航907和958行代码需要修改坐标系
//用户网-地图 //用户网-地图
private static String baseUrl = "http://20.97.50.41:6080/arcgis/rest/services/founder/dg20191120/MapServer"; private static String baseUrl = "http://192.168.2.56:19076/arcgis/rest/services/founder/dg20191120/MapServer";
//互联网-Geo //用户网-导航
private static String baseGeoUrl = "http://20.97.50.41:8050/selectVdzjx"; private static String naviUrl = "http://192.168.2.56:19085/PPmap/LBSservice";
//公安网-Geo
private static String baseGeoUrl = "http://192.168.2.56:19087/esBzdzTestQuery";
//用户网-搜索 //用户网-搜索
private static String searchUrl = "http://20.97.50.41:8051/selectPoiDataList"; private static String searchUrl = "http://192.168.2.56:19084/selectPoiDataList";
//二标四实-单位
private static String dwUrl = "http://192.168.2.56:19084/selectVdwjx";
//二标四实-房屋
private static String fwUrl = "http://192.168.2.56:19084/selectVfwjx";
//二标四实-地址
private static String dzUrl = "http://192.168.2.56:19084/selectVdzjx";
/**********************************************************************************************/ /**********************************************************************************************/
/*****************************************公安网***********************************************
// /*****************************************公安网***********************************************
//公安网-地图 //公安网-地图
private static String baseUrl = "http://68.174.69.45:6080/arcgis/rest/services/founder/dg20191120/MapServer"; private static String baseUrl = "http://68.174.69.45:6080/arcgis/rest/services/founder/dg20191120/MapServer";
//公安网-Geo //公安网-Geo
private static String baseGeoUrl = "http://68.174.69.46:8051/selectVdzjx"; private static String baseGeoUrl = "http://68.174.25.107:8090/esBzdzTestQuery";
//公安网-搜索 //公安网-搜索
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.5/"; private static String naviUrl = "http://68.26.19.197:8380/PPmap/LBSservice";
//二标四实-单位
private static String dwUrl = "http://68.174.69.46:8051/selectVdwjx";
//二标四实-房屋
private static String fwUrl = "http://68.174.69.46:8051/selectVfwjx";
//二标四实-地址
private static String dzUrl = "http://68.174.69.46:8051/selectVdzjx";
/**********************************************************************************************/ /**********************************************************************************************/
// argis证书 // argis证书
...@@ -51,7 +76,6 @@ public class Constants { ...@@ -51,7 +76,6 @@ public class Constants {
//测试热力图 //测试热力图
private static String hotPotsUrl = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/911CallsHotspot/GPServer/911%20Calls%20Hotspot"; private static String hotPotsUrl = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/911CallsHotspot/GPServer/911%20Calls%20Hotspot";
//arcGis证书 //arcGis证书
public static final String BASE_MAP_RUNTIME = baseRunTime; public static final String BASE_MAP_RUNTIME = baseRunTime;
//服务器Url //服务器Url
...@@ -69,4 +93,11 @@ public class Constants { ...@@ -69,4 +93,11 @@ public class Constants {
//热力图 //热力图
public static final String BASE_HOT_POTS_URL = hotPotsUrl; public static final String BASE_HOT_POTS_URL = hotPotsUrl;
//二标四实-房屋
public static final String BASE_FW_URL = fwUrl;
//二标四实-地址
public static final String BASE_DZ_URL = dzUrl;
//二标四实-单位
public static final String BASE_DW_URL = dwUrl;
} }
...@@ -152,6 +152,16 @@ public class ArcGisLocation implements IArcGisLocationOption { ...@@ -152,6 +152,16 @@ public class ArcGisLocation implements IArcGisLocationOption {
return this; return this;
} }
/**
* @param distance 默认逆地理编码距离是0.1,单位是km;
* 需要在最上层调用
*/
@Override
public IArcGisLocationOption setGeoDistance(double distance) {
mArcGisLocationView.setGeoDistance(distance);
return this;
}
@Override @Override
public ArcGisLocationView.CalloutStyleBuilder getCalloutStyleBuilder() { public ArcGisLocationView.CalloutStyleBuilder getCalloutStyleBuilder() {
return mArcGisLocationView.getCalloutStyleBuilder(); return mArcGisLocationView.getCalloutStyleBuilder();
......
...@@ -89,6 +89,13 @@ public interface IArcGisLocationOption { ...@@ -89,6 +89,13 @@ public interface IArcGisLocationOption {
* 默认不跟随 * 默认不跟随
*/ */
IArcGisLocationOption setFollowMapViewPoint(boolean isFollow); IArcGisLocationOption setFollowMapViewPoint(boolean isFollow);
/**
* @param distance 默认逆地理编码距离是0.1,单位是km;
* 需要在最上层调用
*
*/
IArcGisLocationOption setGeoDistance(double distance);
/** /**
* callout样式 * callout样式
*/ */
......
...@@ -47,6 +47,13 @@ public class LocationModel implements Parcelable { ...@@ -47,6 +47,13 @@ public class LocationModel implements Parcelable {
this.locationChangeType = locationChangeType; this.locationChangeType = locationChangeType;
} }
public LocationModel(double xPoint, double yPoint, String address, String poi, String extraInfo) {
this.xPoint = xPoint;
this.yPoint = yPoint;
this.address = address;
this.poi = poi;
this.extraInfo = extraInfo;
}
private LocationModel(Parcel in){ private LocationModel(Parcel in){
xPoint = in.readDouble(); xPoint = in.readDouble();
......
package cn.com.founder.arcgislib.navi; package cn.com.founder.arcgislib.navi;
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.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;
...@@ -38,4 +39,10 @@ public class ArcGisNavi implements IArcGisNaviOption { ...@@ -38,4 +39,10 @@ public class ArcGisNavi implements IArcGisNaviOption {
mArcGisNaviView.setNaviImage(naviImage); mArcGisNaviView.setNaviImage(naviImage);
return this; return this;
} }
@Override
public IArcGisNaviOption setCustomPointNavi(PointModel startPoint, PointModel endPoint) {
mArcGisNaviView.setCustomPointNavi(startPoint,endPoint);
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.common.Variable;
import cn.com.founder.arcgislib.model.PointModel;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
...@@ -25,4 +26,11 @@ public interface IArcGisNaviOption { ...@@ -25,4 +26,11 @@ public interface IArcGisNaviOption {
* @param naviImage int(资源ID)-导航图片 * @param naviImage int(资源ID)-导航图片
*/ */
IArcGisNaviOption setNaviImage(int naviImage); IArcGisNaviOption setNaviImage(int naviImage);
/**
* 自定义点导航
* @param startPoint 起点
* @param endPoint 终点
*/
IArcGisNaviOption setCustomPointNavi(PointModel startPoint, PointModel endPoint);
} }
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.option.IArcGisSearchOption; import cn.com.founder.arcgislib.search.option.IArcGisSearchOption;
import cn.com.founder.arcgislib.view.ArcGisSearchView; import cn.com.founder.arcgislib.view.ArcGisSearchView;
...@@ -19,4 +20,20 @@ public class ArcGisSearch implements IArcGisSearchOption { ...@@ -19,4 +20,20 @@ public class ArcGisSearch implements IArcGisSearchOption {
public ArcGisSearch(ArcGisSearchView arcGisSearchView) { public ArcGisSearch(ArcGisSearchView arcGisSearchView) {
this.mArcGisSearchView = arcGisSearchView; this.mArcGisSearchView = arcGisSearchView;
} }
/**
* @param type 搜索类型:0:poi,1:实有单位,2:实有房屋,3:标准地址
* @param keyWord 关键字
*/
@Override
public IArcGisSearchOption setSearchData(int type, String keyWord) {
mArcGisSearchView.setSearchData(type,keyWord);
return this;
}
@Override
public IArcGisSearchOption setSearchSelectedListener(ISearchSelectedListener listener) {
mArcGisSearchView.setSearchSelectedListener(listener);
return this;
}
} }
package cn.com.founder.arcgislib.search.option; package cn.com.founder.arcgislib.search.option;
import cn.com.founder.arcgislib.search.listener.ISearchSelectedListener;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
...@@ -8,4 +10,16 @@ package cn.com.founder.arcgislib.search.option; ...@@ -8,4 +10,16 @@ package cn.com.founder.arcgislib.search.option;
* Description:搜索 * Description:搜索
*/ */
public interface IArcGisSearchOption { public interface IArcGisSearchOption {
/**
* @param type 搜索类型:0:poi,1:实有单位,2:实有房屋,3:标准地址
* @param keyWord 关键字
*/
IArcGisSearchOption setSearchData(int type , String keyWord);
/**
* @param listener 设置列表点击事件监听
*/
IArcGisSearchOption setSearchSelectedListener(ISearchSelectedListener listener);
} }
package cn.com.founder.arcgislib.utils; package cn.com.founder.arcgislib.utils;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.graphics.Rect;
import android.os.Build;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.Window;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.EditText; import android.widget.EditText;
...@@ -10,40 +16,152 @@ import android.widget.EditText; ...@@ -10,40 +16,152 @@ import android.widget.EditText;
* Author:luo_shaopeng * Author:luo_shaopeng
* Date:2020/2/11 20:27 * Date:2020/2/11 20:27
* EMail:luo_shaopeng@founder.com.cn * EMail:luo_shaopeng@founder.com.cn
* Description:toDo * Description:键盘
*/ */
public class KeyboardUtil { public class KeyboardUtil {
/**
* 显示软键盘的延迟时间
*/
public static final int SHOW_KEYBOARD_DELAY_TIME = 200;
public final static int KEYBOARD_VISIBLE_THRESHOLD_DP = 100;
public static void showKeyboard(final EditText editText, boolean delay) {
showKeyboard(editText, delay ? SHOW_KEYBOARD_DELAY_TIME : 0);
}
/**
* 针对给定的editText显示软键盘(editText会先获得焦点). 可以和{@link #hideKeyboard(View)}
* 搭配使用,进行键盘的显示隐藏控制。
*/
public static void showKeyboard(final EditText editText, int delay) {
if (null == editText)
return;
if (!editText.requestFocus()) {
return;
}
if (delay > 0) {
editText.postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) editText.getContext().getApplicationContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
}, delay);
} else {
InputMethodManager imm = (InputMethodManager) editText.getContext().getApplicationContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
}
/** /**
* 显示键盘 * 隐藏软键盘 可以和{@link #showKeyboard(EditText, boolean)}搭配使用,进行键盘的显示隐藏控制。
*
* @param view 当前页面上任意一个可用的view
*/ */
public static void showKeyboard(final View view) { public static boolean hideKeyboard(final View view) {
view.requestFocus(); if (null == view)
InputMethodManager inputManager = return false;
(InputMethodManager) view.getContext().getSystemService(
Context.INPUT_METHOD_SERVICE); InputMethodManager inputManager = (InputMethodManager) view.getContext().getApplicationContext()
inputManager.showSoftInput(view, 0); .getSystemService(Context.INPUT_METHOD_SERVICE);
// 即使当前焦点不在editText,也是可以隐藏的。
return inputManager.hideSoftInputFromWindow(view.getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
} }
/** /**
* 打开软键盘 * Set keyboard visibility change event listener.
* *
* @param mEditText 输入框 * @param activity Activity
* @param mContext 上下文 * @param listener KeyboardVisibilityEventListener
*/ */
public static void openKeybord(EditText mEditText, Context mContext) { @SuppressWarnings("deprecation")
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); public static void setVisibilityEventListener(final Activity activity,
imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN); final KeyboardVisibilityEventListener listener) {
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
if (activity == null) {
throw new NullPointerException("Parameter:activity must not be null");
} }
if (listener == null) {
throw new NullPointerException("Parameter:listener must not be null");
}
final View activityRoot = ((ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT)).getChildAt(0);
final ViewTreeObserver.OnGlobalLayoutListener layoutListener =
new ViewTreeObserver.OnGlobalLayoutListener() {
private final Rect r = new Rect();
private final int visibleThreshold = Math.round(
DensityUtil.dip2px(activity, KEYBOARD_VISIBLE_THRESHOLD_DP));
private boolean wasOpened = false;
@Override
public void onGlobalLayout() {
activityRoot.getWindowVisibleDisplayFrame(r);
int heightDiff = activityRoot.getRootView().getHeight() - r.height();
boolean isOpen = heightDiff > visibleThreshold;
if (isOpen == wasOpened) {
// keyboard state has not changed
return;
}
wasOpened = isOpen;
boolean removeListener = listener.onVisibilityChanged(isOpen, heightDiff);
if (removeListener) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
activityRoot.getViewTreeObserver()
.removeOnGlobalLayoutListener(this);
} else {
activityRoot.getViewTreeObserver()
.removeGlobalOnLayoutListener(this);
}
}
}
};
activityRoot.getViewTreeObserver().addOnGlobalLayoutListener(layoutListener);
}
/**
* Determine if keyboard is visible
*
* @param activity Activity
* @return Whether keyboard is visible or not
*/
public static boolean isKeyboardVisible(Activity activity) {
Rect r = new Rect();
View activityRoot = ((ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT)).getChildAt(0);
int visibleThreshold =
Math.round(DensityUtil.dip2px(activity, KEYBOARD_VISIBLE_THRESHOLD_DP));
activityRoot.getWindowVisibleDisplayFrame(r);
int heightDiff = activityRoot.getRootView().getHeight() - r.height();
return heightDiff > visibleThreshold;
}
public interface KeyboardVisibilityEventListener {
/** /**
* 关闭隐藏键盘 * @return to remove global listener or not
*/ */
public static void hideKeyboard(final View view) { boolean onVisibilityChanged(boolean isOpen, int heightDiff);
InputMethodManager imm =
(InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
} }
} }
...@@ -11,6 +11,9 @@ import android.widget.Toast; ...@@ -11,6 +11,9 @@ import android.widget.Toast;
import com.esri.arcgisruntime.geometry.Point; import com.esri.arcgisruntime.geometry.Point;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
...@@ -255,4 +258,23 @@ public class ToolUtil { ...@@ -255,4 +258,23 @@ public class ToolUtil {
return resultPoint; return resultPoint;
} }
/**
* @return 东莞最大最小经纬度
*/
public static String dongGuanSearchParams(String value){
try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("jsjd", "114.26742553710938");
jsonObject.put("qsjd", "113.50799560546875");
jsonObject.put("jswd","23.152313232421875");
jsonObject.put("qswd", "22.646942138671875");
jsonObject.put("value", value);
jsonObject.put("isAll", "0");
return jsonObject.toString();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
} }
...@@ -173,7 +173,7 @@ public class ArcGisHotPotsView extends LinearLayout implements View.OnClickListe ...@@ -173,7 +173,7 @@ public class ArcGisHotPotsView extends LinearLayout implements View.OnClickListe
if (bottomParentView == null) { if (bottomParentView == null) {
bottomParentView = View.inflate(mContext, R.layout.layout_hot_pots_input, null); bottomParentView = View.inflate(mContext, R.layout.layout_hot_pots_input, null);
initBottomView(); initBottomView();
popupLayout = PopupLayout.init(mContext, bottomParentView); popupLayout = new PopupLayout(mContext, bottomParentView);
popupLayout.setUseRadius(true); popupLayout.setUseRadius(true);
popupLayout.setHeight((int) (ToolUtil.getScreenHeight(mContext) * 0.35), false); popupLayout.setHeight((int) (ToolUtil.getScreenHeight(mContext) * 0.35), false);
} }
......
...@@ -25,7 +25,6 @@ import android.widget.EditText; ...@@ -25,7 +25,6 @@ import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
...@@ -218,6 +217,16 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -218,6 +217,16 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
*/ */
private List<LocationModel> locationModelList = new LinkedList<>(); private List<LocationModel> locationModelList = new LinkedList<>();
/**
* 默认逆地理编码距离是0.1,单位是km;
*/
private double distance = 0.1;
/**
* 使用聚合时使用此字段
*/
protected boolean isUseCluster = false;
public ArcGisLocationView(Context context, ArcGisMapView arcGisMapView) { public ArcGisLocationView(Context context, ArcGisMapView arcGisMapView) {
this(context); this(context);
this.mContext = context; this.mContext = context;
...@@ -1052,6 +1061,8 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -1052,6 +1061,8 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
@Override @Override
public void onUp(Variable.TouchUp touchUp, MotionEvent motionEvent) { public void onUp(Variable.TouchUp touchUp, MotionEvent motionEvent) {
if(isUseCluster)
return;
if (touchUp == Variable.TouchUp.UP && mFollowMapGetCenterPoint) { if (touchUp == Variable.TouchUp.UP && mFollowMapGetCenterPoint) {
final android.graphics.Point screenPoint = new android.graphics.Point( final android.graphics.Point screenPoint = new android.graphics.Point(
mScreenCenterXPoint, mScreenCenterXPoint,
...@@ -1109,6 +1120,8 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -1109,6 +1120,8 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
@Override @Override
public void onSingleTap(MotionEvent motionEvent) { public void onSingleTap(MotionEvent motionEvent) {
if(isUseCluster)
return;
switch (currSearchType) { switch (currSearchType) {
case SEARCH: case SEARCH:
case NONE: case NONE:
...@@ -1121,6 +1134,8 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -1121,6 +1134,8 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
@Override @Override
public void onLongPress(MotionEvent motionEvent) { public void onLongPress(MotionEvent motionEvent) {
if(isUseCluster)
return;
switch (currSearchType) { switch (currSearchType) {
case SEARCH: case SEARCH:
case NONE: case NONE:
...@@ -1204,6 +1219,14 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -1204,6 +1219,14 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
} }
/** /**
* @param distance 默认逆地理编码距离是0.1,单位是km;
* 需要在最上层调用
*/
public void setGeoDistance(double distance){
this.distance = distance;
}
/**
* 正常点击显示加载狂,显示气泡组件 * 正常点击显示加载狂,显示气泡组件
* *
* @param point 坐标点 * @param point 坐标点
...@@ -1227,21 +1250,31 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -1227,21 +1250,31 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
showDialog(); showDialog();
} }
double[] lngArray = ToolUtil.calcMaxMinLng(point, 0.5);
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
try { try {
jsonObject.put("jsjd", String.valueOf(lngArray[0])); jsonObject.put("index","bzdz");
jsonObject.put("qsjd", String.valueOf(lngArray[1]));
jsonObject.put("jswd", String.valueOf(lngArray[2])); JSONObject infoObject = new JSONObject();
jsonObject.put("qswd", String.valueOf(lngArray[3])); infoObject.put("field","xy");
infoObject.put("distance",String.valueOf(distance));
JSONObject xyObject = new JSONObject();
xyObject.put("lat",String.valueOf(point.getY()));
xyObject.put("lon",String.valueOf(point.getX()));
infoObject.put("point",xyObject);
jsonObject.put("geographicInfo",infoObject);
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
// Log.e("GEOCeoder========",jsonObject.toString());
OkHttp3Utils.doPost(Constants.BASE_GEO_URL, jsonObject.toString(), new Callback() { OkHttp3Utils.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();
Toast.makeText(mContext, "请求失败,请重试", Toast.LENGTH_LONG).show(); // Toast.makeText(mContext, "请求失败,请重试", Toast.LENGTH_LONG).show();
Log.e("Fail", "e=" + e.toString()); Log.e("Fail", "e=" + e.toString());
} }
...@@ -1253,7 +1286,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -1253,7 +1286,7 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
if (response.isSuccessful()) { if (response.isSuccessful()) {
if (response.body() != null) { if (response.body() != null) {
String responseStr = response.body().string(); String responseStr = response.body().string();
Log.e("responseStr", responseStr); // Log.e("responseStr", responseStr);
JsonObject jsonObject = GsonUtil.gsonToBean(responseStr, JsonObject.class); JsonObject jsonObject = GsonUtil.gsonToBean(responseStr, JsonObject.class);
int status = jsonObject.get("status").getAsInt(); int status = jsonObject.get("status").getAsInt();
if (status == 200) { if (status == 200) {
...@@ -1262,18 +1295,8 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -1262,18 +1295,8 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList
JsonObject jsonObject1 = (JsonObject) dataArray.get(0); JsonObject jsonObject1 = (JsonObject) dataArray.get(0);
//地址全称 //地址全称
address = jsonObject1.get("dzqc").getAsString(); address = jsonObject1.get("dzqc").getAsString();
///所属派出所代码_名称 ///地址详址
poi = jsonObject1.get("sspcsdm_mc").getAsString(); poi = jsonObject1.get("dzxz").getAsString();
// if (dataArray.size() == 1) {
// JsonObject jsonObject1 = (JsonObject) dataArray.get(0);
// //地址全称
// address = jsonObject1.get("dzqc").getAsString();
// ///所属派出所代码_名称
// poi = jsonObject1.get("sspcsdm_mc").getAsString();
// } else {
//
// }
} }
} }
...@@ -1289,6 +1312,12 @@ public class ArcGisLocationView extends LinearLayout implements View.OnClickList ...@@ -1289,6 +1312,12 @@ 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() {
......
...@@ -54,6 +54,11 @@ public class ArcGisMapView extends LinearLayout { ...@@ -54,6 +54,11 @@ public class ArcGisMapView extends LinearLayout {
* 导航地图操作图层(点) * 导航地图操作图层(点)
*/ */
private GraphicsOverlay mRouteMarkerGraphicsOverlay; private GraphicsOverlay mRouteMarkerGraphicsOverlay;
/**
* 聚合地图操作图层(点)
*/
private GraphicsOverlay mClusterGraphicsOverlay;
/** /**
* 长按事件拦截 * 长按事件拦截
*/ */
...@@ -107,6 +112,7 @@ public class ArcGisMapView extends LinearLayout { ...@@ -107,6 +112,7 @@ public class ArcGisMapView extends LinearLayout {
addLocationGraphicLayers(); addLocationGraphicLayers();
addSearchGraphicLayers(); addSearchGraphicLayers();
addRouteMarkerGraphicLayers(); addRouteMarkerGraphicLayers();
addClusterGraphicLayers();
mLongPressEvent = null; mLongPressEvent = null;
mMapView.setOnTouchListener(new ArcGisMapView.MapTouchListener(getContext().getApplicationContext(), mMapView)); mMapView.setOnTouchListener(new ArcGisMapView.MapTouchListener(getContext().getApplicationContext(), mMapView));
...@@ -125,6 +131,7 @@ public class ArcGisMapView extends LinearLayout { ...@@ -125,6 +131,7 @@ public class ArcGisMapView extends LinearLayout {
mLocationGraphicsOverlay.setOpacity(0.8f); mLocationGraphicsOverlay.setOpacity(0.8f);
mMapView.getGraphicsOverlays().add(mLocationGraphicsOverlay); mMapView.getGraphicsOverlays().add(mLocationGraphicsOverlay);
} }
private void addSearchGraphicLayers() { private void addSearchGraphicLayers() {
// Add location layer // Add location layer
if (mSearchGraphicsOverlay == null) { if (mSearchGraphicsOverlay == null) {
...@@ -133,6 +140,7 @@ public class ArcGisMapView extends LinearLayout { ...@@ -133,6 +140,7 @@ public class ArcGisMapView extends LinearLayout {
mSearchGraphicsOverlay.setOpacity(0.8f); mSearchGraphicsOverlay.setOpacity(0.8f);
mMapView.getGraphicsOverlays().add(mSearchGraphicsOverlay); mMapView.getGraphicsOverlays().add(mSearchGraphicsOverlay);
} }
private void addNaviGraphicLayers() { private void addNaviGraphicLayers() {
// Add location layer // Add location layer
if (mNaviGraphicsOverlay == null) { if (mNaviGraphicsOverlay == null) {
...@@ -141,6 +149,7 @@ public class ArcGisMapView extends LinearLayout { ...@@ -141,6 +149,7 @@ public class ArcGisMapView extends LinearLayout {
mNaviGraphicsOverlay.setOpacity(0.8f); mNaviGraphicsOverlay.setOpacity(0.8f);
mMapView.getGraphicsOverlays().add(mNaviGraphicsOverlay); mMapView.getGraphicsOverlays().add(mNaviGraphicsOverlay);
} }
private void addRouteMarkerGraphicLayers() { private void addRouteMarkerGraphicLayers() {
// Add location layer // Add location layer
if (mRouteMarkerGraphicsOverlay == null) { if (mRouteMarkerGraphicsOverlay == null) {
...@@ -150,6 +159,15 @@ public class ArcGisMapView extends LinearLayout { ...@@ -150,6 +159,15 @@ public class ArcGisMapView extends LinearLayout {
mMapView.getGraphicsOverlays().add(mRouteMarkerGraphicsOverlay); mMapView.getGraphicsOverlays().add(mRouteMarkerGraphicsOverlay);
} }
private void addClusterGraphicLayers() {
// Add location layer
if (mClusterGraphicsOverlay == null) {
mClusterGraphicsOverlay = new GraphicsOverlay();
}
mClusterGraphicsOverlay.setOpacity(0.8f);
mMapView.getGraphicsOverlays().add(mClusterGraphicsOverlay);
}
protected MapView getMapView() { protected MapView getMapView() {
return mMapView; return mMapView;
} }
...@@ -157,16 +175,23 @@ public class ArcGisMapView extends LinearLayout { ...@@ -157,16 +175,23 @@ public class ArcGisMapView extends LinearLayout {
protected GraphicsOverlay getLocationGraphicsOverlay() { protected GraphicsOverlay getLocationGraphicsOverlay() {
return mLocationGraphicsOverlay; return mLocationGraphicsOverlay;
} }
protected GraphicsOverlay getSearchGraphicsOverlay() { protected GraphicsOverlay getSearchGraphicsOverlay() {
return mSearchGraphicsOverlay; return mSearchGraphicsOverlay;
} }
protected GraphicsOverlay getNaviGraphicsOverlay() { protected GraphicsOverlay getNaviGraphicsOverlay() {
return mSearchGraphicsOverlay; return mSearchGraphicsOverlay;
} }
protected GraphicsOverlay getRouteMarkerGraphicsOverlay() { protected GraphicsOverlay getRouteMarkerGraphicsOverlay() {
return mRouteMarkerGraphicsOverlay; return mRouteMarkerGraphicsOverlay;
} }
protected GraphicsOverlay getClusterGraphicsOverlay(){
return mClusterGraphicsOverlay;
}
private class MapTouchListener extends DefaultMapViewOnTouchListener { private class MapTouchListener extends DefaultMapViewOnTouchListener {
/** /**
* Instantiates a new DrawingMapViewOnTouchListener with the specified * Instantiates a new DrawingMapViewOnTouchListener with the specified
...@@ -192,6 +217,10 @@ public class ArcGisMapView extends LinearLayout { ...@@ -192,6 +217,10 @@ public class ArcGisMapView extends LinearLayout {
} }
if (myTouchClusterListener != null) {
myTouchLocationListener.onUp(Variable.TouchUp.UP, motionEvent);
}
if (mRotateEvent != null && myTouchCompassListener != null) { if (mRotateEvent != null && myTouchCompassListener != null) {
mRotateEvent = null; mRotateEvent = null;
myTouchCompassListener.onUp(Variable.TouchUp.RORATE, motionEvent); myTouchCompassListener.onUp(Variable.TouchUp.RORATE, motionEvent);
...@@ -204,6 +233,9 @@ public class ArcGisMapView extends LinearLayout { ...@@ -204,6 +233,9 @@ public class ArcGisMapView extends LinearLayout {
if (myTouchLocationListener != null) { if (myTouchLocationListener != null) {
myTouchLocationListener.onSingleTap(motionEvent); myTouchLocationListener.onSingleTap(motionEvent);
} }
if (myTouchClusterListener != null) {
myTouchClusterListener.onSingleTap(motionEvent);
}
return super.onSingleTapConfirmed(motionEvent); return super.onSingleTapConfirmed(motionEvent);
} }
...@@ -232,6 +264,7 @@ public class ArcGisMapView extends LinearLayout { ...@@ -232,6 +264,7 @@ public class ArcGisMapView extends LinearLayout {
private MyTouchLocationListener myTouchLocationListener; private MyTouchLocationListener myTouchLocationListener;
private MyTouchCompassListener myTouchCompassListener; private MyTouchCompassListener myTouchCompassListener;
private MyTouchClusterListener myTouchClusterListener;
protected void setMyTouchLocationListener(MyTouchLocationListener touchListener) { protected void setMyTouchLocationListener(MyTouchLocationListener touchListener) {
this.myTouchLocationListener = touchListener; this.myTouchLocationListener = touchListener;
...@@ -241,6 +274,10 @@ public class ArcGisMapView extends LinearLayout { ...@@ -241,6 +274,10 @@ public class ArcGisMapView extends LinearLayout {
this.myTouchCompassListener = touchListener; this.myTouchCompassListener = touchListener;
} }
protected void setMyTouchClusterListener(MyTouchClusterListener touchListener) {
this.myTouchClusterListener = touchListener;
}
/** /**
* 位置触摸监听类 * 位置触摸监听类
*/ */
...@@ -288,4 +325,25 @@ public class ArcGisMapView extends LinearLayout { ...@@ -288,4 +325,25 @@ public class ArcGisMapView extends LinearLayout {
void onRotate(double rotationAngle); void onRotate(double rotationAngle);
} }
/**
* 聚合触摸监听类
*/
interface MyTouchClusterListener {
/**
* 手指抬起时
*
* @param touchUp {@link Variable.TouchUp}
* @param motionEvent 移动事件
*/
void onUp(Variable.TouchUp touchUp, MotionEvent motionEvent);
/**
* 单击
*
* @param motionEvent 移动事件
*/
void onSingleTap(MotionEvent motionEvent);
}
} }
...@@ -61,6 +61,7 @@ import java.util.List; ...@@ -61,6 +61,7 @@ import java.util.List;
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.model.PointModel;
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.DensityUtil; import cn.com.founder.arcgislib.utils.DensityUtil;
...@@ -198,6 +199,8 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -198,6 +199,8 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
initRoute(); initRoute();
} }
private ArcGisNaviView(Context context) { private ArcGisNaviView(Context context) {
...@@ -223,6 +226,10 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -223,6 +226,10 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
if (mineNaviRoute == null) { if (mineNaviRoute == null) {
MineNaviMain.getInstance().setNaviURL(Constants.BASE_NAVI_URL); MineNaviMain.getInstance().setNaviURL(Constants.BASE_NAVI_URL);
/** /**
* 设置华为token
*/
// MineNaviMain.getInstance().setHuaweicloudToken();
/**
* 获取路径 * 获取路径
*/ */
MineNaviMain.getInstance().init(FileSource.getCachePath(mContext) + "/", mContext, (i, s) -> Log.e("onSdkAuthComplete", i + "#认证")); MineNaviMain.getInstance().init(FileSource.getCachePath(mContext) + "/", mContext, (i, s) -> Log.e("onSdkAuthComplete", i + "#认证"));
...@@ -253,11 +260,14 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -253,11 +260,14 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
* 设置算路成功失败回调 * 设置算路成功失败回调
*/ */
mineNaviRoute.setRoutePlanListener(i -> { mineNaviRoute.setRoutePlanListener(i -> {
Toast.makeText(mContext, "i="+i, Toast.LENGTH_LONG).show();
if (i == MineNaviRoute.ErrorCode.success || i == MineNaviRoute.ErrorCode.successAndLimit) { if (i == MineNaviRoute.ErrorCode.success || i == MineNaviRoute.ErrorCode.successAndLimit) {
routeInfoList.clear(); routeInfoList.clear();
Toast.makeText(mContext, "路线规划完毕", Toast.LENGTH_LONG).show(); Toast.makeText(mContext, "路线规划完毕", Toast.LENGTH_LONG).show();
arcGisSearchView.disDialog(); arcGisSearchView.disDialog();
if(popupLayout != null){
popupLayout.dismiss(); popupLayout.dismiss();
}
createNaviBt(); createNaviBt();
// 语音播报 // 语音播报
List<Integer> mergeRouteCalcCond = mineNaviRoute.getMergeRouteCalcCond(); List<Integer> mergeRouteCalcCond = mineNaviRoute.getMergeRouteCalcCond();
...@@ -680,8 +690,6 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -680,8 +690,6 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
@SuppressLint("SimpleDateFormat") SimpleDateFormat format = new SimpleDateFormat("HH:mm"); @SuppressLint("SimpleDateFormat") SimpleDateFormat format = new SimpleDateFormat("HH:mm");
ll_navi_bottom_info_text.setNaviContent("$disStr $timeStr", format.format(date) + "到达"); ll_navi_bottom_info_text.setNaviContent("$disStr $timeStr", format.format(date) + "到达");
//TODO 更新蚯蚓图
} }
private void showServiceArea() { private void showServiceArea() {
...@@ -760,6 +768,26 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -760,6 +768,26 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
mNaviIv.setImageDrawable(getResources().getDrawable(naviImage)); mNaviIv.setImageDrawable(getResources().getDrawable(naviImage));
} }
/**
* 自定义点开始导航
* @param startPoint 起点
* @param endPoint 终点
* new PointModel(113.6242709,22.8810121,"新丽佳百货"),new PointModel(113.6351135,22.8874085,"大自然花场")
*/
public void setCustomPointNavi(PointModel startPoint, PointModel endPoint) {
if (startPoint == null) {
Toast.makeText(mContext, "请设置起点", Toast.LENGTH_LONG).show();
return;
}
if (endPoint == null) {
Toast.makeText(mContext, "请设置终点", Toast.LENGTH_LONG).show();
return;
}
setCustomPointNaviRoute(startPoint, endPoint);
}
@Override @Override
public void onClick(View view) { public void onClick(View view) {
...@@ -768,14 +796,16 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -768,14 +796,16 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear(); arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mMapView.getCallout().dismiss(); arcGisLocationView.mMapView.getCallout().dismiss();
} }
setPopupLayout(); setPopupLayout();
} }
private void setPopupLayout() { private void setPopupLayout() {
if (bottomNaviParentView == null) { if (bottomNaviParentView == null) {
bottomNaviParentView = View.inflate(mContext, R.layout.layout_navi_input, null); bottomNaviParentView = View.inflate(mContext, R.layout.layout_navi_input, null);
initBottomView(); initBottomView();
popupLayout = PopupLayout.init(mContext, bottomNaviParentView); popupLayout = new PopupLayout(mContext, bottomNaviParentView);
popupLayout.setUseRadius(true); popupLayout.setUseRadius(true);
popupLayout.setHeight((int) (ToolUtil.getScreenHeight(mContext) * 0.35), false); popupLayout.setHeight((int) (ToolUtil.getScreenHeight(mContext) * 0.35), false);
} }
...@@ -807,7 +837,7 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -807,7 +837,7 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
isSelectStartAddress = true; isSelectStartAddress = true;
arcGisSearchView.currSearchType = Variable.SearchType.START_ADDRESS_SEARCH; arcGisSearchView.currSearchType = Variable.SearchType.START_ADDRESS_SEARCH;
arcGisSearchView.setVisibility(View.VISIBLE); arcGisSearchView.setVisibility(View.VISIBLE);
arcGisSearchView.mScrollLayout.scrollToClose(); arcGisSearchView.mBottomLayout.performClick();
}); });
endAddressTv.setOnClickListener(view -> { endAddressTv.setOnClickListener(view -> {
...@@ -822,7 +852,8 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -822,7 +852,8 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
isSelectStartAddress = false; isSelectStartAddress = false;
arcGisSearchView.currSearchType = Variable.SearchType.END_ADDRESS_SEARCH; arcGisSearchView.currSearchType = Variable.SearchType.END_ADDRESS_SEARCH;
arcGisSearchView.setVisibility(View.VISIBLE); arcGisSearchView.setVisibility(View.VISIBLE);
arcGisSearchView.mScrollLayout.scrollToClose(); arcGisSearchView.mBottomLayout.performClick();
}); });
...@@ -852,17 +883,18 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -852,17 +883,18 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
Toast.makeText(mContext, "出发地和目的地不能是同一地址", Toast.LENGTH_LONG).show(); Toast.makeText(mContext, "出发地和目的地不能是同一地址", Toast.LENGTH_LONG).show();
return; return;
} }
setRoute(); setDefaultSearchNaviRoute();
}); });
} }
private void setRoute() { private void setDefaultSearchNaviRoute() {
// mContext.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//屏幕常亮
arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear(); arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear();
arcGisLocationView.setSearchLocation(startSearchModel.getX(), startSearchModel.getY(), Variable.SearchType.START_ADDRESS_SEARCH); arcGisLocationView.setSearchLocation(startSearchModel.getX(), startSearchModel.getY(), Variable.SearchType.START_ADDRESS_SEARCH);
arcGisLocationView.setSearchLocation(endSearchModel.getX(), endSearchModel.getY(), Variable.SearchType.END_ADDRESS_SEARCH); arcGisLocationView.setSearchLocation(endSearchModel.getX(), endSearchModel.getY(), Variable.SearchType.END_ADDRESS_SEARCH);
Log.e("startPoint",startSearchModel.getX()+","+ startSearchModel.getY() + "," + startSearchModel.getPoiname());
Log.e("endPoint",endSearchModel.getX()+","+ endSearchModel.getY() + "," + endSearchModel.getPoiname());
PlanPoint startPoint = new PlanPoint(); PlanPoint startPoint = new PlanPoint();
startPoint.name = startSearchModel.getPoiname(); startPoint.name = startSearchModel.getPoiname();
double[] startPointArr = GpsUtil.toGCJ02Point(startSearchModel.getY(), startSearchModel.getX()); double[] startPointArr = GpsUtil.toGCJ02Point(startSearchModel.getY(), startSearchModel.getX());
...@@ -877,7 +909,6 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -877,7 +909,6 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
// endPoint.pos = new GeoPoint(22.970898,114.047684); // endPoint.pos = new GeoPoint(22.970898,114.047684);
endPoint.idx = PlanPoint.VIA1_IDX; endPoint.idx = PlanPoint.VIA1_IDX;
/** /**
* 设置开始点 * 设置开始点
* *
...@@ -898,6 +929,59 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener, ...@@ -898,6 +929,59 @@ public class ArcGisNaviView extends FrameLayout implements View.OnClickListener,
arcGisSearchView.showDialog(); arcGisSearchView.showDialog();
} }
/**
* 自定义点开启导航
*
* @param startPoint 起点
* @param endPoint 终点
*/
private void setCustomPointNaviRoute(PointModel startPoint, PointModel endPoint) {
arcGisLocationView.mLocationGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mNaviGraphicsOverlay.getGraphics().clear();
arcGisLocationView.mMapView.getCallout().dismiss();
if (mapScanleValue != arcGisLocationView.mMapView.getMapScale()) {
arcGisLocationView.mMapView.setViewpointScaleAsync(mapScanleValue);
}
arcGisLocationView.setSearchLocation(startPoint.getxPoint(), startPoint.getyPoint(), Variable.SearchType.START_ADDRESS_SEARCH);
arcGisLocationView.setSearchLocation(endPoint.getxPoint(), endPoint.getyPoint(), Variable.SearchType.END_ADDRESS_SEARCH);
PlanPoint startPlantPoint = new PlanPoint();
startPlantPoint.name = startPoint.getPointName();
//互联网
// double[] startPointArr = GpsUtil.toGCJ02Point(startPoint.getyPoint(), startPoint.getxPoint());
// startPlantPoint.pos = new GeoPoint(startPointArr[0], startPointArr[1]);
//公安网
startPlantPoint.pos = new GeoPoint(startPoint.getyPoint(), startPoint.getxPoint());
startPlantPoint.idx = 0;
PlanPoint endPlantPoint = new PlanPoint();
endPlantPoint.name = endPoint.getPointName();
// double[] endPointArr = GpsUtil.toGCJ02Point(endPoint.getyPoint(), endPoint.getxPoint());
// endPlantPoint.pos = new GeoPoint(endPointArr[0], endPointArr[1]);
endPlantPoint.pos = new GeoPoint(endPoint.getyPoint(), endPoint.getxPoint());
endPlantPoint.idx = PlanPoint.VIA1_IDX;
/**
* 设置开始点
*
* @param originPoint 开始点
* @return 设置成功还是失败
*/
mineNaviRoute.setOrigin(startPlantPoint);
/**
* 设置目的地
*
* @param destPoint 目的地
* @return 设置成功还是失败
*/
mineNaviRoute.setDestination(endPlantPoint);
mineNaviRoute.calcDriveRoute();
}
@Override @Override
public void selectedResult(SearchModel searchModel) { public void selectedResult(SearchModel searchModel) {
arcGisSearchView.mSearchEt.setText(""); arcGisSearchView.mSearchEt.setText("");
......
...@@ -2,6 +2,9 @@ package cn.com.founder.arcgislib.widget.cluster; ...@@ -2,6 +2,9 @@ package cn.com.founder.arcgislib.widget.cluster;
import android.content.Context; import android.content.Context;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import androidx.core.content.ContextCompat;
import com.esri.arcgisruntime.geometry.Envelope; import com.esri.arcgisruntime.geometry.Envelope;
import com.esri.arcgisruntime.geometry.Geometry; import com.esri.arcgisruntime.geometry.Geometry;
...@@ -9,10 +12,9 @@ import com.esri.arcgisruntime.geometry.Point; ...@@ -9,10 +12,9 @@ import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.geometry.Polygon; import com.esri.arcgisruntime.geometry.Polygon;
import com.esri.arcgisruntime.mapping.view.Graphic; import com.esri.arcgisruntime.mapping.view.Graphic;
import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; import com.esri.arcgisruntime.mapping.view.GraphicsOverlay;
import com.esri.arcgisruntime.mapping.view.MapScaleChangedEvent;
import com.esri.arcgisruntime.mapping.view.MapScaleChangedListener;
import com.esri.arcgisruntime.mapping.view.MapView; import com.esri.arcgisruntime.mapping.view.MapView;
import com.esri.arcgisruntime.symbology.CompositeSymbol; import com.esri.arcgisruntime.symbology.CompositeSymbol;
import com.esri.arcgisruntime.symbology.PictureMarkerSymbol;
import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol;
import com.esri.arcgisruntime.symbology.Symbol; import com.esri.arcgisruntime.symbology.Symbol;
import com.esri.arcgisruntime.symbology.TextSymbol; import com.esri.arcgisruntime.symbology.TextSymbol;
...@@ -22,6 +24,8 @@ import java.util.HashMap; ...@@ -22,6 +24,8 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import cn.com.founder.arcgislib.view.ArcGisClusterView;
/** /**
* 模拟聚合 * 模拟聚合
*/ */
...@@ -45,8 +49,12 @@ public class ClusterLayer { ...@@ -45,8 +49,12 @@ public class ClusterLayer {
ArrayList<Graphic> _clusterGraphics = new ArrayList<Graphic>(); ArrayList<Graphic> _clusterGraphics = new ArrayList<Graphic>();
private PictureMarkerSymbol defaultPointImageSymbol;
private SimpleMarkerSymbol defaultClusterCircleSymbol;
private ArcGisClusterView.ClusterStyleBuilder clusterStyleBuilder;
public ClusterLayer(final MapView mapView, GraphicsOverlay GraphicsOverlay, public ClusterLayer(final MapView mapView, GraphicsOverlay GraphicsOverlay,
Context context) { Context context, ArcGisClusterView.ClusterStyleBuilder clusterStyleBuilder) {
if (mapView == null || GraphicsOverlay == null) { if (mapView == null || GraphicsOverlay == null) {
return; return;
} }
...@@ -58,12 +66,24 @@ public class ClusterLayer { ...@@ -58,12 +66,24 @@ public class ClusterLayer {
this._clusterGraphicsOverlay = new GraphicsOverlay(); this._clusterGraphicsOverlay = new GraphicsOverlay();
this._mapView.getGraphicsOverlays().add(this._clusterGraphicsOverlay); this._mapView.getGraphicsOverlays().add(this._clusterGraphicsOverlay);
this._context = context; this._context = context;
this.clusterStyleBuilder = clusterStyleBuilder;
defaultClusterCircleSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE,
clusterStyleBuilder.getmClusterCircleBg(), clusterStyleBuilder.getmClusterCircleSize());
BitmapDrawable bitmapDrawableNormal = (BitmapDrawable) ContextCompat
.getDrawable(_context, clusterStyleBuilder.getmDefaultExpandImage());
try {
defaultPointImageSymbol = PictureMarkerSymbol.createAsync(bitmapDrawableNormal).get();
} catch (Exception e) {
e.printStackTrace();
}
this._clusterGraphics(); this._clusterGraphics();
mapView.addMapScaleChangedListener(new MapScaleChangedListener() { mapView.addMapScaleChangedListener(mapScaleChangedEvent -> {
@Override
public void mapScaleChanged(MapScaleChangedEvent mapScaleChangedEvent) {
if (!mapView.isNavigating()) { if (!mapView.isNavigating()) {
_clusterResolution = _getExtent(_mapView.getVisibleArea()) _clusterResolution = _getExtent(_mapView.getVisibleArea())
.getWidth() / _mapView.getWidth(); .getWidth() / _mapView.getWidth();
...@@ -72,7 +92,6 @@ public class ClusterLayer { ...@@ -72,7 +92,6 @@ public class ClusterLayer {
_clusterGraphicsOverlay.getGraphics().clear(); _clusterGraphicsOverlay.getGraphics().clear();
_clusterGraphics(); _clusterGraphics();
} }
}
}); });
} }
...@@ -104,8 +123,7 @@ public class ClusterLayer { ...@@ -104,8 +123,7 @@ public class ClusterLayer {
public ArrayList<Graphic> getGraphicsByClusterID(int id) { public ArrayList<Graphic> getGraphicsByClusterID(int id) {
ArrayList<Graphic> graphics = new ArrayList<>(); ArrayList<Graphic> graphics = new ArrayList<>();
for (Graphic gra : this._clusterGraphics for (Graphic gra : this._clusterGraphics) {
) {
if (Integer.valueOf(gra.getAttributes().get("clusterID").toString()) == id) { if (Integer.valueOf(gra.getAttributes().get("clusterID").toString()) == id) {
graphics.add(gra); graphics.add(gra);
} }
...@@ -231,17 +249,21 @@ public class ClusterLayer { ...@@ -231,17 +249,21 @@ public class ClusterLayer {
private Symbol createClusterSymbol(Map<String, Object> cluster) { private Symbol createClusterSymbol(Map<String, Object> cluster) {
int count = (Integer) cluster.get("count"); int count = (Integer) cluster.get("count");
if (count == 1) { if (count == 1) {
return markerSymbol; return defaultPointImageSymbol != null ? defaultPointImageSymbol : markerSymbol;
} else if (count > 1) { } else if (count > 1) {
List<Symbol> symbols = new ArrayList<>(); List<Symbol> symbols = new ArrayList<>();
if (count <= 10) { symbols.add(defaultClusterCircleSymbol);
symbols.add(markerSymbolS);
} else if (count > 10 && count <= 20) { // if (count <= 10) {
symbols.add(markerSymbolM); // symbols.add(markerSymbolS);
} else if (count > 20) { // } else if (count > 10 && count <= 20) {
symbols.add(markerSymbolL); // symbols.add(markerSymbolM);
} // } else if (count > 20) {
TextSymbol textSymbol = new TextSymbol(18, count + "", Color.WHITE, // symbols.add(markerSymbolL);
// }
TextSymbol textSymbol = new TextSymbol(clusterStyleBuilder.getmClusterTextSize(), count + "", clusterStyleBuilder.getmClusterTextColor(),
TextSymbol.HorizontalAlignment.CENTER, TextSymbol.HorizontalAlignment.CENTER,
TextSymbol.VerticalAlignment.MIDDLE); TextSymbol.VerticalAlignment.MIDDLE);
symbols.add(textSymbol); symbols.add(textSymbol);
...@@ -252,6 +274,7 @@ public class ClusterLayer { ...@@ -252,6 +274,7 @@ public class ClusterLayer {
return null; return null;
} }
SimpleMarkerSymbol markerSymbolL = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, SimpleMarkerSymbol markerSymbolL = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE,
Color.RED, 36); Color.RED, 36);
SimpleMarkerSymbol markerSymbolM = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, SimpleMarkerSymbol markerSymbolM = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE,
...@@ -264,4 +287,6 @@ public class ClusterLayer { ...@@ -264,4 +287,6 @@ public class ClusterLayer {
private Envelope _getExtent(Polygon polygon) { private Envelope _getExtent(Polygon polygon) {
return polygon.getExtent(); return polygon.getExtent();
} }
} }
...@@ -5,8 +5,6 @@ import android.content.DialogInterface; ...@@ -5,8 +5,6 @@ import android.content.DialogInterface;
import android.view.Gravity; import android.view.Gravity;
import android.view.View; import android.view.View;
import androidx.annotation.LayoutRes;
/** /**
* Copyright: 方正国际软件有限公司 * Copyright: 方正国际软件有限公司
* Author:luo_shaopeng * Author:luo_shaopeng
...@@ -15,7 +13,7 @@ import androidx.annotation.LayoutRes; ...@@ -15,7 +13,7 @@ import androidx.annotation.LayoutRes;
* Description:类似popup的dialog--辅助类 * Description:类似popup的dialog--辅助类
*/ */
public class PopupLayout { public class PopupLayout {
private static PopupDialog mPopupDialog;//内部使用的Dialog private PopupDialog mPopupDialog;//内部使用的Dialog
private static DismissListener mDismissListener;//监听弹出窗口的消失事件 private static DismissListener mDismissListener;//监听弹出窗口的消失事件
public static int POSITION_LEFT= Gravity.LEFT;//从最左侧弹出 public static int POSITION_LEFT= Gravity.LEFT;//从最左侧弹出
...@@ -24,33 +22,37 @@ public class PopupLayout { ...@@ -24,33 +22,37 @@ public class PopupLayout {
public static int POSITION_TOP= Gravity.TOP;//从顶部弹出 public static int POSITION_TOP= Gravity.TOP;//从顶部弹出
public static int POSITION_BOTTOM= Gravity.BOTTOM;//从底部弹出 public static int POSITION_BOTTOM= Gravity.BOTTOM;//从底部弹出
private PopupLayout(){} public PopupLayout(Context context, View contentView){
/**
* 初始化PopLayout
* @param context
* @param contentLayoutId 内容布局Id
*/
public static PopupLayout init(Context context, @LayoutRes int contentLayoutId){
PopupLayout popupLayout=new PopupLayout();
mPopupDialog=new PopupDialog(context);
mPopupDialog.setContentLayout(contentLayoutId);
popupLayout.initListener();
return popupLayout;
}
/**
* 初始化PopLayout
* @param context
* @param contentView 内容布局
*/
public static PopupLayout init(Context context, View contentView){
PopupLayout popupLayout=new PopupLayout();
mPopupDialog=new PopupDialog(context); mPopupDialog=new PopupDialog(context);
mPopupDialog.setContentLayout(contentView); mPopupDialog.setContentLayout(contentView);
popupLayout.initListener(); initListener();
return popupLayout; }
}
// /**
// * 初始化PopLayout
// * @param context
// * @param contentLayoutId 内容布局Id
// */
// public PopupLayout init(Context context, @LayoutRes int contentLayoutId){
// PopupLayout popupLayout=new PopupLayout();
// mPopupDialog=new PopupDialog(context);
// mPopupDialog.setContentLayout(contentLayoutId);
// popupLayout.initListener();
// return popupLayout;
// }
//
// /**
// * 初始化PopLayout
// * @param context
// * @param contentView 内容布局
// */
// public PopupLayout init(Context context, View contentView){
// PopupLayout popupLayout=new PopupLayout();
// mPopupDialog=new PopupDialog(context);
// mPopupDialog.setContentLayout(contentView);
// initListener();
// return popupLayout;
// }
//初始化Dialog监听器 //初始化Dialog监听器
private void initListener(){ private void initListener(){
......
/*
*
* * sufly0001@gmail.com Modify the code to enhance the ease of use.
* *
* * Copyright (C) 2015 Ted xiong-wei@hotmail.com
* * Licensed under the Apache License, Version 2.0 (the "License");
* * you may not use this file except in compliance with the License.
* * You may obtain a copy of the License at
* *
* * http://www.apache.org/licenses/LICENSE-2.0
* *
* * Unless required by applicable law or agreed to in writing, software
* * distributed under the License is distributed on an "AS IS" BASIS,
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* * See the License for the specific language governing permissions and
* * limitations under the License.
*
*
*/
package cn.com.founder.arcgislib.widget.scrolllayout.content;
import android.content.Context;
import android.os.Looper;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.ViewTreeObserver;
import android.widget.AbsListView;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import cn.com.founder.arcgislib.widget.scrolllayout.ScrollLayout;
public class ContentListView extends ListView {
private final CompositeScrollListener compositeScrollListener =
new CompositeScrollListener();
private boolean showShadow = false;
private View shadowView;
public ContentListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ContentListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ContentListView(Context context) {
super(context);
}
{
super.setOnScrollListener(compositeScrollListener);
getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewGroup.LayoutParams layoutParams = getLayoutParams();
ViewParent parent = getParent();
while (parent != null) {
if (parent instanceof ScrollLayout) {
int height = ((ScrollLayout) parent).getMeasuredHeight() - ((ScrollLayout) parent).minOffset;
if (layoutParams.height == height) {
return;
} else {
layoutParams.height = height;
break;
}
}
parent = parent.getParent();
}
setLayoutParams(layoutParams);
}
});
}
/**
* 添加一个OnScrollListener,不会取代已添加OnScrollListener
* <p>
* <b>Make sure call this on UI thread</b>
* </p>
*
* @param listener the listener to add
*/
@Override
public void setOnScrollListener(final OnScrollListener listener) {
addOnScrollListener(listener);
}
/**
* 添加一个OnScrollListener,不会取代已添加OnScrollListener
* <p>
* <b>Make sure call this on UI thread</b>
* </p>
*
* @param listener the listener to add
*/
public void addOnScrollListener(final OnScrollListener listener) {
throwIfNotOnMainThread();
compositeScrollListener.addOnScrollListener(listener);
}
/**
* 删除前一个添加scrollListener,只会删除完全相同的对象
* <p>
* <b>Make sure call this on UI thread.</b>
* </p>
*
* @param listener the listener to remove
*/
public void removeOnScrollListener(final OnScrollListener listener) {
throwIfNotOnMainThread();
compositeScrollListener.removeOnScrollListener(listener);
}
/**
* 需要调用之前setOnScrollListener
*
* @param shadowView the shadow view
*/
public void setTopShadowView(View shadowView) {
if (shadowView == null) {
return;
}
this.shadowView = shadowView;
addOnScrollListener(new OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
View firstChild = view.getChildAt(0);
if (firstChild != null) {
if (firstVisibleItem == 0 && firstChild.getTop() == 0) {
showShadow = false;
showTopShadow();
} else if (!showShadow) {
showShadow = true;
showTopShadow();
}
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
});
}
private void showTopShadow() {
if (shadowView == null || shadowView.getVisibility() == View.VISIBLE) {
return;
}
shadowView.setVisibility(View.VISIBLE);
}
private void hideTopShadow() {
if (shadowView == null || shadowView.getVisibility() == View.GONE) {
return;
}
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
ViewParent parent = getParent();
while (parent != null) {
if (parent instanceof ScrollLayout) {
((ScrollLayout) parent).setAssociatedListView(this);
break;
}
parent = parent.getParent();
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
}
private void throwIfNotOnMainThread() {
if (Looper.myLooper() != Looper.getMainLooper()) {
throw new IllegalStateException("Must be invoked from the main thread.");
}
}
private class CompositeScrollListener implements OnScrollListener {
private final List<OnScrollListener> scrollListenerList = new
ArrayList<OnScrollListener>();
public void addOnScrollListener(OnScrollListener listener) {
if (listener == null) {
return;
}
for (OnScrollListener scrollListener : scrollListenerList) {
if (listener == scrollListener) {
return;
}
}
scrollListenerList.add(listener);
}
public void removeOnScrollListener(OnScrollListener listener) {
if (listener == null) {
return;
}
Iterator<OnScrollListener> iterator = scrollListenerList.iterator();
while (iterator.hasNext()) {
OnScrollListener scrollListener = iterator.next();
if (listener == scrollListener) {
iterator.remove();
return;
}
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
List<OnScrollListener> listeners = new ArrayList<OnScrollListener>(scrollListenerList);
for (OnScrollListener listener : listeners) {
listener.onScrollStateChanged(view, scrollState);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
List<OnScrollListener> listeners = new ArrayList<OnScrollListener>(scrollListenerList);
for (OnScrollListener listener : listeners) {
listener.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);
}
}
}
}
package cn.com.founder.arcgislib.widget.scrolllayout.content;
import android.content.Context;
import android.os.Looper;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.ViewTreeObserver;
import android.widget.AbsListView;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import cn.com.founder.arcgislib.widget.scrolllayout.ScrollLayout;
public class ContentRecyclerView extends RecyclerView {
private final ContentRecyclerView.CompositeScrollListener compositeScrollListener =
new ContentRecyclerView.CompositeScrollListener();
public ContentRecyclerView(Context context) {
super(context);
}
public ContentRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public ContentRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
{
super.addOnScrollListener(compositeScrollListener);
getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewGroup.LayoutParams layoutParams = getLayoutParams();
ViewParent parent = getParent();
while (parent != null) {
if (parent instanceof ScrollLayout) {
int height = ((ScrollLayout) parent).getMeasuredHeight() - ((ScrollLayout) parent).minOffset;
if (layoutParams.height == height) {
return;
} else {
layoutParams.height = height;
break;
}
}
parent = parent.getParent();
}
setLayoutParams(layoutParams);
}
});
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
ViewParent parent = getParent();
while (parent != null) {
if (parent instanceof ScrollLayout) {
((ScrollLayout) parent).setAssociatedRecyclerView(this);
break;
}
parent = parent.getParent();
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
}
private void throwIfNotOnMainThread() {
if (Looper.myLooper() != Looper.getMainLooper()) {
throw new IllegalStateException("Must be invoked from the main thread.");
}
}
private class CompositeScrollListener extends OnScrollListener {
private final List<OnScrollListener> scrollListenerList = new
ArrayList<OnScrollListener>();
public void addOnScrollListener(RecyclerView.OnScrollListener listener) {
if (listener == null) {
return;
}
for (RecyclerView.OnScrollListener scrollListener : scrollListenerList) {
if (listener == scrollListener) {
return;
}
}
scrollListenerList.add(listener);
}
public void removeOnScrollListener(AbsListView.OnScrollListener listener) {
if (listener == null) {
return;
}
Iterator<OnScrollListener> iterator = scrollListenerList.iterator();
while (iterator.hasNext()) {
RecyclerView.OnScrollListener scrollListener = iterator.next();
if (listener == scrollListener) {
iterator.remove();
return;
}
}
}
@Override
public void onScrollStateChanged(RecyclerView view, int scrollState) {
List<OnScrollListener> listeners = new ArrayList<OnScrollListener>(scrollListenerList);
for (RecyclerView.OnScrollListener listener : listeners) {
listener.onScrollStateChanged(view, scrollState);
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
List<OnScrollListener> listeners = new ArrayList<OnScrollListener>(scrollListenerList);
for (RecyclerView.OnScrollListener listener : listeners) {
listener.onScrolled(recyclerView, dx, dy);
}
}
}
}
/*
*
* * sufly0001@gmail.com Modify the code to enhance the ease of use.
* *
* * Copyright (C) 2015 Ted xiong-wei@hotmail.com
* * Licensed under the Apache License, Version 2.0 (the "License");
* * you may not use this file except in compliance with the License.
* * You may obtain a copy of the License at
* *
* * http://www.apache.org/licenses/LICENSE-2.0
* *
* * Unless required by applicable law or agreed to in writing, software
* * distributed under the License is distributed on an "AS IS" BASIS,
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* * See the License for the specific language governing permissions and
* * limitations under the License.
*
*
*/
package cn.com.founder.arcgislib.widget.scrolllayout.content;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewParent;
import android.widget.ScrollView;
import cn.com.founder.arcgislib.widget.scrolllayout.ScrollLayout;
public class ContentScrollView extends ScrollView {
public interface OnScrollChangedListener {
void onScrollChanged(int l, int t, int oldl, int oldt);
}
private OnScrollChangedListener listener;
public ContentScrollView(Context context) {
super(context);
}
public ContentScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ContentScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setOnScrollChangeListener(OnScrollChangedListener listener) {
this.listener = listener;
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
listener.onScrollChanged(l, t, oldl, oldt);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
ViewParent parent = this.getParent();
while (parent != null) {
if (parent instanceof ScrollLayout) {
((ScrollLayout) parent).setAssociatedScrollView(this);
break;
}
parent = parent.getParent();
}
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
ViewParent parent = this.getParent();
if (parent instanceof ScrollLayout) {
if (((ScrollLayout) parent).getCurrentStatus() == ScrollLayout.Status.OPENED)
return false;
}
return super.onTouchEvent(ev);
}
}
<?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"
android:orientation="vertical"
style="@style/WrapContent.WidthMatchParent">
<cn.com.founder.arcgislib.widget.scrolllayout.ScrollLayout
android:id="@+id/search_scroll_layout"
style="@style/MatchParent"
android:background="#66000000"
app:exitOffset="100dp"
app:isSupportExit="false"
app:maxOffset="100dp"
app:minOffset="100dp"
app:mode="open">
<RelativeLayout style="@style/MatchParent">
<LinearLayout
android:id="@+id/search_arrow_layout"
style="@style/WrapContent.WidthMatchParent"
android:orientation="vertical"
android:background="@color/colorWhite">
<ImageView
android:id="@+id/search_scroll_arrow_iv"
style="@style/WrapContent"
android:layout_gravity="center"
android:padding="@dimen/dimen_block_10"
android:src="@drawable/icon_search_line" />
</LinearLayout>
<cn.com.founder.arcgislib.widget.scrolllayout.content.ContentScrollView
style="@style/MatchParent"
android:layout_below="@+id/search_arrow_layout"
android:background="@color/colorWhite"
>
<LinearLayout
style="@style/MatchParent"
android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true"
>
<RelativeLayout style="@style/WrapContent.WidthMatchParent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/dimen_block_20"
android:layout_marginLeft="@dimen/dimen_block_10"
android:layout_marginRight="@dimen/dimen_block_10"
android:background="@drawable/bg_white_stroke_gray_selector"
android:descendantFocusability="beforeDescendants"
android:gravity="center_vertical"
android:orientation="horizontal"
android:layout_toLeftOf="@+id/search_scroll_content_search_cancel_tv"
android:layout_centerVertical="true">
<ImageView
android:layout_width="20dip"
android:layout_height="20dip"
android:layout_marginLeft="@dimen/dimen_block_10"
android:layout_marginTop="2dip"
android:src="@drawable/icon_search" />
<EditText
android:id="@+id/search_scroll_content_search_et"
style="@style/WrapContent.WidthMatchParent"
android:textColor="@color/color_333333"
android:textSize="@dimen/dimen_font_16sp"
android:background="@null"
android:hint="@string/string_search_hint"
android:paddingLeft="@dimen/dimen_block_5"
android:paddingTop="@dimen/dimen_block_10"
android:paddingRight="@dimen/dimen_block_10"
android:paddingBottom="@dimen/dimen_block_10"
android:textColorHint="@color/color_CCCCCC"
android:imeOptions="actionSearch"
android:inputType="text"
android:textCursorDrawable="@drawable/bg_navi_et_cursor"
/>
</LinearLayout>
<TextView
android:id="@+id/search_scroll_content_search_cancel_tv"
style="@style/WrapContent.main_text_style"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:text="@string/string_common_cancel"
android:padding="@dimen/dimen_block_10"
android:layout_marginRight="@dimen/dimen_block_10"
android:visibility="gone"
/>
</RelativeLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/search_swipeRecyclerView"
style="@style/WrapContent.WidthMatchParent"
android:visibility="gone"
/>
<LinearLayout
android:id="@+id/search_empty"
style="@style/MatchParent"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone"
>
<TextView
style="@style/WrapContent.main_text_style"
android:text="@string/string_common_nodata" />
</LinearLayout>
</LinearLayout>
</cn.com.founder.arcgislib.widget.scrolllayout.content.ContentScrollView>
</RelativeLayout>
</cn.com.founder.arcgislib.widget.scrolllayout.ScrollLayout>
</LinearLayout>
\ No newline at end of file
...@@ -28,7 +28,8 @@ ...@@ -28,7 +28,8 @@
<string name="string_navi_start_navi">开始导航</string> <string name="string_navi_start_navi">开始导航</string>
<!--搜索--> <!--搜索-->
<string name="string_search_hint">请输入地点</string> <string name="string_search_hint">请输入关键字</string>
<string name="string_search_prompt">请选择</string>
<!--热力图--> <!--热力图-->
<string name="string_hotpots_title">热力图</string> <string name="string_hotpots_title">热力图</string>
<string name="string_hotpots_start_time">开始时间</string> <string name="string_hotpots_start_time">开始时间</string>
......
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