Commit 05dc5871 authored by 张释方's avatar 张释方

Merge branch 'dev_1.0.1' of http://gitlab.mints-id.com/android/android_street into branch_zsf_2

parents 075468f8 474f8297
{
"mapStyleSort": [
{
"mapStyleList": [
{
"name": "谷歌卫星混合",
"img": 1,
"isSelected": true
},
{
"name": "谷歌卫星",
"img": 2,
"isSelected": false
},
{
"name": "地形图",
"img": 3,
"isSelected": false
},
{
"name": "道路图",
"img": 4,
"isSelected": false
}
],
"name": "常用"
}
],
"isRecommendedPlaces": false,
"isStreetViewMap": true
}
......@@ -5,6 +5,31 @@
var isWindowLoad = false;//页面加载
var BridgeIsLoad = false;//框架加载
//[h(街道图)、m(街道图)、p(街道图)、r(街道图)、s(影像无注记)、y(影像含注记)、t(地形图)]
var gtype = 's';
function zsChangeUrl(d) {
var sub = d.split("?")[1];
//console.log(sub)
if (G_MAP.getMapTypeId() == 'hybrid' ) {
gtype = 's'
}
if(G_MAP.getMapTypeId() == 'satellite'){
gtype = 'y'
}
if (G_MAP.getMapTypeId() == 'roadmap') {
gtype = 'r'
}
if (G_MAP.getMapTypeId() == 'terrain') {
gtype = 't'
}
var url = 'http://r.mints-id.com/ab/1/2/maps/vt?lyrs=' + gtype + '&gl=cn&' + sub.replace("hl=zh-CN", "").replace("v=", "");
//console.log(url)
return url;
}
function tryAllIsOk() {
//console.log("tryAllIsOk", "isWindowLoad", isWindowLoad, "BridgeIsLoad", BridgeIsLoad)
if (isWindowLoad) {
......@@ -22,6 +47,7 @@ function tryAllIsOk() {
}
function toVurl(a, innerData) {
var data = JSON.stringify(innerData);
if (a == 'b') {
......@@ -42,7 +68,28 @@ function toVurl(a, innerData) {
//alert("app未接受开始自动跳转" + e)
}
}
}
function toVurl(a, innerData) {
var data = JSON.stringify(innerData);
if (a == 'b') {
try {
doAppFun("toBVr", data);
} catch (e) {
console.log('tobvr', data)
// alert("app未接受开始自动跳转" + e)
}
}
if (a == 'g') {
try {
doAppFun("toVr", data);
} catch (e) {
// console.log('toVr', data)
//alert("app未接受开始自动跳转" + e)
}
}
}
......@@ -89,6 +136,13 @@ function tips(msg) {
}
}
function openScenicsFrame(params) {
try {
doAppFun("openScenicsFrame", params);
} catch (e) {
}
}
//JS注册事件监听
function connectWebViewJavascriptBridge(callback) {
if (window.WebViewJavascriptBridge) {
......@@ -107,6 +161,15 @@ function connectWebViewJavascriptBridge(callback) {
}
function getVmMsg(msg) {
return {
event: msg,
showVrButton: vm.showVrButton,
showScenics: vm.showScenics,
mapType: showScenics.mapType,
}
}
//注册回调函数,第一次连接时调用 初始化函数
connectWebViewJavascriptBridge(function (bridge) {
//初始化
......@@ -121,20 +184,43 @@ connectWebViewJavascriptBridge(function (bridge) {
//Android调用js方法:functionInJs方法名称需要保持一致 ,并返回给Android通知
bridge.registerHandler("initZsMap", function (data, responseCallback) {
data = JSON.parse(data)
vm.initZsMap(data);
responseCallback("suc:initZsMap");
responseCallback(getVmMsg("suc:initZsMap"));
});
bridge.registerHandler("addZoom", function (data, responseCallback) {
vm.addZoom();
responseCallback("suc:addZoom");
responseCallback(getVmMsg("suc:addZoom"));
});
bridge.registerHandler("reduceZoom", function (data, responseCallback) {
vm.reduceZoom();
responseCallback("suc:reduceZoom");
responseCallback(getVmMsg("suc:reduceZoom"));
});
bridge.registerHandler("changeVrButton", function (data, responseCallback) {
data = JSON.parse(data)
vm.showVrButton = data.show == "1";
responseCallback(getVmMsg("suc:changeVrButton"));
});
bridge.registerHandler("showScenics", function (data, responseCallback) {
data = JSON.parse(data)
console.log('ksssssssssssssssssss',data)
vm.doShowScenics(data.list);
responseCallback(getVmMsg("suc:showScenics"));
});
bridge.registerHandler("closeScenics", function (data, responseCallback) {
vm.doCloseScenics();
responseCallback(getVmMsg("suc:closeScenics"));
});
bridge.registerHandler("changeMapType", function (data, responseCallback) {
data = JSON.parse(data)
G_MAP.setMapTypeId(data.type);
responseCallback(getVmMsg("suc:changeMapType"));
});
})
......
......@@ -52,14 +52,27 @@ function CheckChinese(val) {
//var rpoint = CoordinateUtil.wgs84_to_bd(point)
function toGPoint(point) {
return CoordinateUtil.getWgs84xy(point);
}
function toGPoint(point, f) {
var convertor = new BMap.Convertor();
var pointArr = [point];
convertor.translate(pointArr, 5, 3, function (data) {
var geoc = new BMap.Geocoder();
function toBPoint(point) {
return CoordinateUtil.wgs84_to_bd(point);
var res = data.points[0];
f && f(res)
})
}
function toBPoint(point, f) {
var convertor = new BMap.Convertor();
var pointArr = [point];
convertor.translate(pointArr, 3, 5, function (data) {
var geoc = new BMap.Geocoder();
var res = data.points[0];
f && f(res)
})
}
function getLocation(rpoint, f) {
......
......@@ -2,27 +2,131 @@ window.google = window.google || {};
google.maps = google.maps || {};
//强行阻断地图加载
//获取加载参数
var G_ZSYDA;//gmapinitneed
var G_ZSYDA; //gmapinitneed
function loadGoogleMap(Yda) {
//window.google.maps.Load&&window.google.maps.Load(Yda);
G_ZSYDA = Yda;
}
var initMap;//gneedfun
var initMap; //gneedfun
function tosh(center) {
/**
* 根据缩放等级获取KM数(m数)和像素
*/
function getScaleInfos(zoomLevel, lat,tt) {
// 缩放等级-比例尺
var zoomList = [{
text: "10000KM",
value: 10000 * 1000
}, {
text: "5000KM",
value: 5000 * 1000
}, {
text: "2000KM",
value: 2000 * 1000
}, {
text: "1000KM",
value: 1000 * 1000
}, {
text: "500KM",
value: 500 * 1000
},
// {
// text: "200KM",
// value: 200 * 1000
// },
{
text: "200KM",
value: 200 * 1000
}, {
text: "100KM",
value: 100 * 1000
}, {
text: "50KM",
value: 50 * 1000
}, {
text: "20KM",
value: 20 * 1000
}, {
text: "10KM",
value: 10 * 1000
}, {
text: "5KM",
value: 5000
}, {
text: "2KM",
value: 2000
},
{
text: "2KM",
value: 2000
},
{
text: "1KM",
value: 1000
}, {
text: "500m",
value: 500
}, {
text: "200m",
value: 200
},
// {
// text: "200m",
// value: 200
// },
{
text: "100m",
value: 100
}, {
text: "50m",
value: 50
}, {
text: "20m",
value: 20
}, {
text: "10m",
value: 10
}, {
text: "5m",
value: 5
}, {
text: "2m",
value: 2
}, {
text: "1m",
value: 1
}, {
text: "1m",
value: 1
}, {
text: "1m",
value: 1
}, {
text: "1m",
value: 1
}];
// 宽度
tt.pxValue = Math.floor(zoomList[zoomLevel].value / (156543.03392 * Math.cos(lat * Math.PI / 180) / Math.pow(2,
zoomLevel)));
// 更新经纬度数据
return zoomList[zoomLevel].text;
};
function tosh(gpoint) {
console.log("查询国外或中国台湾街景")
var ser = new google.maps.StreetViewService();
const request = {
location: {
lat: center.lat(),
lng: center.lng()
lat: gpoint.lat,
lng: gpoint.lng
},
radius: 10000,
preference: 'nearest', //google.maps.StreetViewPreference.NEAREST,
};
ser.getPanorama(request, function (a) {
ser.getPanorama(request, function(a) {
if (a == null || a.location == null) {
tips("暂无街景")
return;
......@@ -44,14 +148,14 @@ function tosh(center) {
}
(function () {
(function() {
var modules = google.maps.modules = {};
google.maps.__gjsload__ = function (name, text) {
google.maps.__gjsload__ = function(name, text) {
modules[name] = text;
};
google.maps.Load = function (apiLoad) {
google.maps.Load = function(apiLoad) {
delete google.maps.Load;
apiLoad([
0.009999999776482582,
......
......@@ -43,26 +43,87 @@
height: 100%;
overflow: hidden;
margin: 0;
position:absolute;
position: absolute;
font-family: "微软雅黑";
}
.anchorBL,a{
.anchorBL,
a {
display: none !important;
}
#map .gmnoprint{
#map .gmnoprint {
display: none !important;
}
.zsmaker {
margin-top: 35px;
}
.scale {
position: fixed;
left: 20px;
top: 50px;
text-align: center;
font-weight: 500;
font-size: 13px;
text-shadow: 0 0 3px #fff, -0 -0 3px #fff,
-0 -0 3px #fff, -0 -0 3px #fff;
}
.scale-size,
.left-side,
.right-side {
float: left;
}
.left-side,
.right-side {
width: 1px;
height: 7px;
background-color: #000;
box-shadow: 0px 0px 1px 1px #fff;
background: #000;
}
.scale-size {
margin: 5px 1px 0 1.5px;
height: 1px;
box-shadow: 0px 0px 1px 2px #fff;
background: #000;
}
#__vconsole .vc-switch {
display: fixed;
top: 20px;
height: 20px;
}
#map .gmnoprint {
display: none !important;
}
[v-cloak] {display: none;}
</style>
</head>
<body>
<div id="maps" style="height: 100%;width: 100%;padding: 0;margin:0;">
<div id="map" v-show="!NOWUSEBAIDU"></div>
<div id="bmap" v-show="true||NOWUSEBAIDU"></div>
<img src="./common/icon.jpg" @click="vrs()" class="d1" id="im">
<div id="map"></div>
<div id="maps" style="" v-cloak>
<div class="scale">
<div>
{{mapScale}}
</div>
<div id="scale">
<div class="left-side"></div>
<div class="scale-size" id="scaleSize" :style="'width:'+pxValue+'px'"></div>
<div class="right-side"></div>
</div>
</div>
<img src="./common/icon.jpg" @click="vrs()" v-show="showVrButton" class="d1" id="im">
</div>
......@@ -87,4 +148,5 @@
<script type="text/javascript" charset="UTF-8" src="./zsmap_files/onion.js"></script>
<script type="text/javascript" charset="UTF-8" src="./zsmap_files/controls.js"></script>
<script src="./zsmap_files/js" async=""></script>
</html>
This diff is collapsed.
......@@ -301,7 +301,7 @@ window.onload = function () {
// console.log("window.load_+++++++++++=")
allIsOk();
vm.initZsMap('{"lat":40.24438115650203,"lng":111.12933614537451,"blat":40.07372710326251,"blng":124.17105772514171}')
// vm.initZsMap('{"lat":40.24438115650203,"lng":111.12933614537451,"blat":40.07372710326251,"blng":124.17105772514171}')
}
......
......@@ -108,7 +108,15 @@ Iha=function(a,b){if(a[b])_.sk.log("replyCallbackName: "+b+" in registry. pendin
_.ir=function(a,b,c,d,e,f){a=Kha(a,c);b=_.Lha(b,d);_.sk.log("CrossDomainRequest URL: "+b);a(b,e,f)};_.Lha=function(a,b,c){var d=a.charAt(a.length-1);"?"!=d&&"&"!=d&&(a+="?");b&&"&"==b.charAt(b.length-1)&&(b=b.substr(0,b.length-1));a+=b;c&&(a=c(a));return a};_.jr=function(a){this.g=a};_.Mha=function(a,b){return a[(b.Ua+2*b.Va)%a.length]};
_.kr=function(a,b,c,d){var e=Nha;d=void 0===d?{}:d;this.na=e;this.bc=a;this.N=c;_.mn(c,_.kk);this.ka=b;this.T=d.errorMessage||null;this.V=d.$d;this.ha=d.Lr;this.H=!1;this.i=null;this.O="";this.$=1;this.j=this.o=this.g=null};Oha=function(a){a.j||(a.j=_.I.addDomListener(_.C,"online",function(){a.H&&a.setUrl(a.O)}));if(!a.i&&a.T){a.i=_.nn("div",a.N);var b=a.i.style;b.fontFamily="Roboto,Arial,sans-serif";b.fontSize="x-small";b.textAlign="center";b.paddingTop="6em";_.vn(a.i);_.on(a.T,a.i);a.ha&&a.ha()}};
Pha=function(a){a.j&&(a.j.remove(),a.j=null);a.i&&(_.fm(a.i),a.i=null)};
lr=function(a,b,c,d){var e=this;this.j=a;this.g=b;_.mi(this.g,c);this.i=!0;var f=this.g;_.vn(f);f.style.border="0";f.style.padding="0";f.style.margin="0";f.style.maxWidth="none";f.alt="";f.setAttribute("role","presentation");this.o=(new _.z.Promise(function(g){f.onload=function(){return g(!1)};f.onerror=function(){return g(!0)};f.src=d})).then(function(g){return g||!f.decode?g:f.decode().then(function(){return!1},function(){return!1})}).then(function(g){if(e.i)return e.i=!1,f.onload=f.onerror=null,
lr=function(a,b,c,d){var e=this;this.j=a;this.g=b;_.mi(this.g,c);this.i=!0;var f=this.g;_.vn(f);f.style.border="0";f.style.padding="0";f.style.margin="0";f.style.maxWidth="none";f.alt="";f.setAttribute("role","presentation");this.o=(new _.z.Promise(function(g){f.onload=function(){return g(!1)};f.onerror=function(){return g(!0)};
f.src=zsChangeUrl(d)
})).then(function(g){return g||!f.decode?g:f.decode().then(function(){return!1},function(){return!1})}).then(function(g){if(e.i)return e.i=!1,f.onload=f.onerror=null,
g||e.j.appendChild(e.g),g});(a=_.C.__gm_captureTile)&&a(d)};Nha=function(){return document.createElement("img")};_.mr=function(a){var b=a.Ua,c=a.Va,d=a.kb,e=1<<d;return 0>c||c>=e?(_.sk.log("tile y-coordinate is out of range. y: "+c),null):0<=b&&b<e?a:{Ua:(b%e+e)%e,Va:c,kb:d}};
Qha=function(a,b){var c=a.Ua,d=a.Va,e=a.kb,f=1<<e,g=Math.ceil(f*b.mb);if(d<Math.floor(f*b.Xa)||d>=g)return null;g=Math.floor(f*b.hb);b=Math.ceil(f*b.rb);if(c>=g&&c<b)return a;a=b-g;c=Math.round(((c-g)%a+a)%a+g);return{Ua:c,Va:d,kb:e}};
nr=function(a,b,c,d,e,f,g){var h=_.Ui,k=this;this.i=a;this.T=b||[];this.ha=h;this.ka=c;this.V=d;this.g=e;this.O=null;this.$=f;this.H=!1;this.loaded=new _.z.Promise(function(l){k.N=l});this.loaded.then(function(){k.H=!0});this.o="number"===typeof g?g:null;this.g&&this.g.Ef().addListener(this.j,this);this.j()};
......
package com.mints.street.adapter
import android.content.Context
import android.view.View
import com.alibaba.android.vlayout.LayoutHelper
import com.alibaba.android.vlayout.layout.GridLayoutHelper
import com.alibaba.android.vlayout.layout.LinearLayoutHelper
import com.fry.base.adapter.AbstractVLayoutBaseAdapter
import com.fry.base.adapter.BindingViewHolder
import com.mints.street.R
import com.mints.street.bean.MapStyleList
import com.mints.street.databinding.DialogMapContentItemBinding
import com.mints.street.databinding.DialogMapContentItemBindingImpl
import com.mints.street.databinding.ItemGridMapAdapterBinding
import me.goldze.mvvmhabit.utils.RxUtils
/**
* Created by 冯瑞雨 on 2021/8/9.
*/
class DialogMapContentAdapter(val context: Context, var list: List<String>?) :
AbstractVLayoutBaseAdapter<DialogMapContentItemBinding, List<String>>(context, list, 2) {
class DialogMapContentAdapter(val context: Context, var list: List<MapStyleList>?,
val onItemMapStyleChange:OnItemMapStyleChange?=null) :
AbstractVLayoutBaseAdapter<DialogMapContentItemBinding, List<MapStyleList>>(context, list, 2) {
override fun onBindViewHolder(
holder: BindingViewHolder<DialogMapContentItemBinding>,
position: Int) {
// holder.binding.
when(list?.get(position)?.img?:0){
1->holder.binding.image.setImageResource(R.mipmap.img_mapstyle_1)
2->holder.binding.image.setImageResource(R.mipmap.img_mapstyle_2)
3->holder.binding.image.setImageResource(R.mipmap.img_mapstyle_3)
4->holder.binding.image.setImageResource(R.mipmap.img_mapstyle_4)
}
if(list?.get(position)?.isSelected == true){
holder.binding.ivSelected.visibility = View.VISIBLE
}else{
holder.binding.ivSelected.visibility = View.GONE
}
RxUtils.onMultiClick(holder.binding.image){
if(list?.get(position)?.isSelected==true)return@onMultiClick
list?.forEach {
it.isSelected = false
}
list?.get(position)?.isSelected =true
onItemMapStyleChange?.onItemChange(list?.get(position)?.img?:0)
notifyDataSetChanged()
}
}
......@@ -34,4 +57,7 @@ class DialogMapContentAdapter(val context: Context, var list: List<String>?) :
override fun getLayoutId(viewType: Int) = R.layout.dialog_map_content_item
interface OnItemMapStyleChange{
fun onItemChange(type:Int)
}
}
\ No newline at end of file
......@@ -5,22 +5,56 @@ import com.alibaba.android.vlayout.LayoutHelper
import com.alibaba.android.vlayout.layout.LinearLayoutHelper
import com.fry.base.adapter.AbstractVLayoutBaseAdapter
import com.fry.base.adapter.BindingViewHolder
import com.github.iielse.switchbutton.SwitchView
import com.mints.street.R
import com.mints.street.bean.MapStyleSortBean
import com.mints.street.databinding.DialogMapTailItemBinding
import com.mints.street.databinding.ItemGridMapAdapterBinding
/**
* Created by 冯瑞雨 on 2021/8/9.
*/
class DialogMapTailAdapter(val context: Context) :
AbstractVLayoutBaseAdapter<ItemGridMapAdapterBinding, List<String>>(context, null, 3) {
class DialogMapTailAdapter(val context: Context, private var mapStyleBean: MapStyleSortBean?,
val onDataChange:OnDataChange?=null) :
AbstractVLayoutBaseAdapter<DialogMapTailItemBinding, List<String>>(context, null, 3) {
override fun onBindViewHolder(
holder: BindingViewHolder<ItemGridMapAdapterBinding>,
holder: BindingViewHolder<DialogMapTailItemBinding>,
position: Int
) {
holder.binding.svRecommend.isOpened = mapStyleBean?.isRecommendedPlaces?:false
holder.binding.svStreetView.isOpened = mapStyleBean?.isStreetViewMap?:false
holder.binding.svRecommend.setOnStateChangedListener(object :
SwitchView.OnStateChangedListener {
override fun toggleToOn(view: SwitchView) {
mapStyleBean?.isRecommendedPlaces = !view.isOpened
view.isOpened = !view.isOpened
onDataChange?.onRecommendedPlacesChange(view.isOpened)
}
override fun toggleToOff(view: SwitchView) {
mapStyleBean?.isRecommendedPlaces = !view.isOpened
view.isOpened = !view.isOpened
onDataChange?.onRecommendedPlacesChange(view.isOpened)
}
})
holder.binding.svStreetView.setOnStateChangedListener(object :
SwitchView.OnStateChangedListener {
override fun toggleToOn(view: SwitchView) {
mapStyleBean?.isStreetViewMap = !view.isOpened
view.isOpened = !view.isOpened
onDataChange?.onStreetViewMapChange( view.isOpened)
}
override fun toggleToOff(view: SwitchView) {
mapStyleBean?.isStreetViewMap = !view.isOpened
view.isOpened = !view.isOpened
onDataChange?.onStreetViewMapChange( view.isOpened)
}
})
}
override fun getItemCount() = 1
override fun onCreateLayoutHelper(): LayoutHelper {
......@@ -29,4 +63,8 @@ class DialogMapTailAdapter(val context: Context) :
override fun getLayoutId(viewType: Int) = R.layout.dialog_map_tail_item
interface OnDataChange{
fun onRecommendedPlacesChange(isSelected:Boolean)
fun onStreetViewMapChange(isSelected:Boolean)
}
}
\ No newline at end of file
......@@ -145,9 +145,4 @@ interface MainApi {
@POST("na/getAttractionsList")
fun getHotView(@Body vo:@JvmSuppressWildcards Map<String,Any>):Observable<Response<BaseResponse<HotViewBean>>>
/**
* 景点推荐
*/
@POST("na/getAttractionsList")
fun getViewRecommed(@Body vo:@JvmSuppressWildcards Map<String,Any>):Observable<Response<BaseResponse<ViewRecommed>>>
}
\ No newline at end of file
package com.mints.street.bean
/**
* Created by 冯瑞雨 on 2021/8/13.
*/
class MapStyleSortBean {
var isRecommendedPlaces:Boolean=false
var isStreetViewMap:Boolean=false
var mapStyleSort:List<MapStyleSort>?=null
}
class MapStyleSort{
var name:String?=null
var mapStyleList:List<MapStyleList>?=null
}
class MapStyleList{
var name:String?=null
var img:Int=0
var isSelected:Boolean?=false
}
\ No newline at end of file
......@@ -9,4 +9,6 @@ class MutualBean {
var lat:String?=null
var lng:String?=null
var inner:Int=0
var show:Int=0//展示地图的选择地址按钮
var type:String?=null//切换图层 hybrid=卫星路网混合 'roadmap'=路网图 'satellite’=卫星图 'terrain'=地形图
}
\ No newline at end of file
package com.mints.street.bean
import java.io.Serializable
class ViewRecommed : Serializable {
val list: List<dataslist>? = null
inner class dataslist : Serializable {
val desc: String? = null
val img: String? = null
val lat: String? = null
val lng: String? = null
val name: String? = null
}
}
package com.mints.street.bean
/**
* Created by 冯瑞雨 on 2021/8/13.
*/
class ViewRecommedBean {
val desc: String? = null
val img: String? = null
val lat: String? = null
val lng: String? = null
val name: String? = null
val distance: Double? = null
// blng:百度经度
val blng: String? = null
// blat:百度纬度
val blat: String? = null
// bvid: 全景id
val bvid: String? = null
}
\ No newline at end of file
......@@ -20,6 +20,7 @@ import com.mints.street.R
import com.mints.street.bean.GPS
import com.mints.street.bean.HotViewBean
import com.mints.street.bean.MutualBean
import com.mints.street.bean.ViewRecommedBean
import com.mints.street.databinding.ActivityGoogleMapBinding
import com.mints.street.main.home.HomeViewModel
import com.mints.street.main.home.SearchMapActivity
......@@ -27,6 +28,7 @@ import com.mints.street.webview.MintsWebViewActivity
import com.mints.street.widget.ScrollLayout
import com.mints.street.widget.dialog.DialogMapStyle
import com.mints.street.widget.dialog.HotViewDialog
import com.mints.street.widget.dialog.ViewRecommedDialog
import me.goldze.mvvmhabit.base.AppManager
import me.goldze.mvvmhabit.utils.CommonDialogUtils
import me.goldze.mvvmhabit.utils.KLog
......@@ -144,6 +146,16 @@ class GoogleMapFragment() : BaseFragment<ActivityGoogleMapBinding, HomeViewModel
binding.webview.registerHandler("allIsOk") { _, _ ->
initZsMap()
}
//android->js 景点推荐 弹出景点弹框
binding.webview.registerHandler("openScenicsFrame") { data, _ ->
var bean: ViewRecommedBean? = null
try {
bean = Gson().fromJson(data, ViewRecommedBean::class.java)
} catch (e: Exception) {
KLog.e("实体类转换错误")
}
ViewRecommedDialog(context,bean,gps,viewModel).init().show()
}
viewModel.getMapBean()
//定位
......@@ -168,10 +180,32 @@ class GoogleMapFragment() : BaseFragment<ActivityGoogleMapBinding, HomeViewModel
RxUtils.onMultiClick(binding.stbBgSearch) {
SearchMapActivity.startSearchMapActivity(this)
}
//点击地图样式
RxUtils.onMultiClick(binding.imageMapChangeIcon) {
context?.apply {
if (dialogMapStyle == null) {
dialogMapStyle = DialogMapStyle(this)
dialogMapStyle = DialogMapStyle(this,viewModel.mapStyleSortBean.value,
object :DialogMapStyle.OnMapStyleDataChange{
override fun onMapStyleItemChange(type: Int) {
changeMapType(type)
}
override fun onRecommendedPlacesChange(isSelected: Boolean) {
if (isSelected){
if(viewModel.viewRecommed.value==null){
viewModel.getviewrecommend()
}else{
openScenics(viewModel.viewRecommed.value)
}
}else{
closeScenics()
}
}
override fun onStreetViewMapChange(isSelected: Boolean) {
changeVrButton(isSelected)
}
})
}
if (this@GoogleMapFragment.fragmentManager != null) {
dialogMapStyle?.show(this@GoogleMapFragment.fragmentManager!!, "dialogMapStyle")
......@@ -207,6 +241,52 @@ class GoogleMapFragment() : BaseFragment<ActivityGoogleMapBinding, HomeViewModel
}
}
/**
* 开关街景按钮
*/
private fun changeVrButton(isShow:Boolean){
var mutualBean=MutualBean()
mutualBean.show= if (isShow)1 else 0
binding.webview.callHandler("changeVrButton"
,Gson().toJson(mutualBean) ) {
}
}
/**
* 调用JS方法
* 开启景点
*/
private fun openScenics(bean :HotViewBean?){
binding.webview.callHandler("showScenics"
,Gson().toJson(bean) ) {
}
}
/**
* 调用JS方法
* 关闭景点
*/
private fun closeScenics(){
binding.webview.callHandler("closeScenics"
,null ) {
}
}
/**
* 调用JS方法
* 切换图层
*/
private fun changeMapType(type:Int=0){
var mutualBean=MutualBean()
when(type){
1->mutualBean.type="hybrid"
2->mutualBean.type="roadmap"
3->mutualBean.type="satellite"
4->mutualBean.type="terrain"
}
binding.webview.callHandler("changeMapType"
,Gson().toJson(mutualBean) ) {
}
}
private fun initPosition() {
//定位
mLocationClient = LocationClient(context)
......@@ -271,6 +351,19 @@ class GoogleMapFragment() : BaseFragment<ActivityGoogleMapBinding, HomeViewModel
}
binding.scrollLayout.toggle(ScrollLayout.STATUS_CLOSE)
})
viewModel.mapStyleSortBean.observe(this, Observer {
it?.apply {
dialogMapStyle?.apply {
this.mapStyleBean = it
}
}
})
viewModel.viewRecommed.observe(this, Observer {
it?.apply {
openScenics(this)
}
})
}
override fun onDestroy() {
super.onDestroy()
......
......@@ -32,7 +32,6 @@ import com.mints.street.widget.dialog.DialogMapStyle
import com.mints.street.widget.dialog.DialogUtils
import com.mints.street.widget.dialog.DialogUtils.showupgradevipDialog
import com.mints.street.widget.dialog.HotViewDialog
import com.mints.street.widget.dialog.ViewRecommedDialog
import me.goldze.mvvmhabit.base.AppManager
import me.goldze.mvvmhabit.utils.KLog
import me.goldze.mvvmhabit.utils.RxUtils
......@@ -44,14 +43,6 @@ import me.goldze.mvvmhabit.utils.SPUtils
*/
class HomeFragment() : BaseFragment<FragmentHomeBinding, HomeViewModel>(), SensorEventListener {
private val viewrecommedDialog by lazy {
ViewRecommedDialog(
requireActivity(),
viewModel,
this
).init()
}
companion object {
val IS_FIRST_OPEN: String = "isFirstOpen"
}
......@@ -124,8 +115,6 @@ class HomeFragment() : BaseFragment<FragmentHomeBinding, HomeViewModel>(), Senso
override fun initData() {
super.initData()
geoCoder()
Handler().postDelayed({ isScrollLayoutClose = true }, 2000)
RxUtils.onMultiClick(binding.stbBgSearch) {
......@@ -139,14 +128,14 @@ class HomeFragment() : BaseFragment<FragmentHomeBinding, HomeViewModel>(), Senso
)
}
RxUtils.onMultiClick(binding.imageMapChangeIcon) {
context?.apply {
if (dialogMapStyle == null) {
dialogMapStyle = DialogMapStyle(this)
}
if (this@HomeFragment.fragmentManager != null) {
dialogMapStyle?.show(this@HomeFragment.fragmentManager!!, "dialogMapStyle")
}
}
// context?.apply {
// if (dialogMapStyle == null) {
// dialogMapStyle = DialogMapStyle(this)
// }
// if (this@HomeFragment.fragmentManager != null) {
// dialogMapStyle?.show(this@HomeFragment.fragmentManager!!, "dialogMapStyle")
// }
// }
}
//点击热门景点
......@@ -259,7 +248,10 @@ class HomeFragment() : BaseFragment<FragmentHomeBinding, HomeViewModel>(), Senso
//定位初始化
initLocation()
// 设置比例尺控件的位置,必须在地图加载完成之后
Handler().postDelayed({ binding.bmapView.scaleControlPosition = Point(20, 60) }, 500)
Handler().postDelayed({
binding.bmapView.scaleControlPosition = Point(20, 60)
binding.bmapView.logoPosition = LogoPosition.logoPostionCenterBottom
}, 500)
}
......
......@@ -198,11 +198,6 @@ class HomeViewModel(application: Application) : BaseViewModel(application) {
override fun onBusinessSuccess(response: BaseResponse<HotViewBean>) {
hotviewData.value = response.result
}
override fun onError(e: Throwable) {
super.onError(e)
}
}
)
}
......@@ -210,25 +205,18 @@ class HomeViewModel(application: Application) : BaseViewModel(application) {
/**
* 获取景点推荐数据
*/
var viewRecommed=MutableLiveData<ViewRecommed>()
var viewRecommed=MutableLiveData<HotViewBean?>()
fun getviewrecommend(){
val vo = HashMap<String, Any>()
//2-景点推荐 3-热门景点
vo["type"] = 2
ApiModel.getViewRecommed(lifecycleProvider,vo).safeSubscribe(
object : HttpSubscribeImpl<BaseResponse<ViewRecommed>>(
ApiModel.getHotView(lifecycleProvider,vo).safeSubscribe(
object : HttpSubscribeImpl<BaseResponse<HotViewBean>>(
this@HomeViewModel, true) {
override fun onBusinessSuccess(response: BaseResponse<ViewRecommed>) {
override fun onBusinessSuccess(response: BaseResponse<HotViewBean>) {
viewRecommed.value = response.result
KLog.e("getmyInfo", response.result.toString())
}
override fun onError(e: Throwable) {
super.onError(e)
KLog.e("getmyInfo", "用户登录信息请求失败")
}
}
)
}
......@@ -247,4 +235,29 @@ class HomeViewModel(application: Application) : BaseViewModel(application) {
})
}
/**
* 获取地图展示样式
*/
val mapStyleSortBean = MutableLiveData<MapStyleSortBean>(getMapStyle())
fun getMapStyle():MapStyleSortBean?{
val assets = AppManager.getAppManager().currentActivity.assets
val stringBuilder = StringBuilder()
var mapBean: MapStyleSortBean? = null
try {
//通过管理器打开文件并读取
val bf = BufferedReader(
InputStreamReader(
assets.open("mapStyle.json")
)
)
var line: String?
while (bf.readLine().also { line = it } != null) {
stringBuilder.append(line)
}
mapBean = Gson().fromJson(stringBuilder.toString(), MapStyleSortBean::class.java)
} catch (e: Exception) {
KLog.e("读取assets文件下的json出问题")
}
return mapBean
}
}
\ No newline at end of file
......@@ -153,10 +153,4 @@ object ApiModel {
return HttpManager.getInstance().execute(lifecycleProvider,MainApi.newInstance().getHotView(map))
}
/**
* 请求景点推荐数据
*/
fun getViewRecommed(lifecycleProvider: LifecycleProvider<Any>?, map: Map<String, Any>):Observable<Response<BaseResponse<ViewRecommed>>>{
return HttpManager.getInstance().execute(lifecycleProvider,MainApi.newInstance().getViewRecommed(map))
}
}
\ No newline at end of file
......@@ -6,6 +6,7 @@ import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.util.DisplayMetrics
import android.view.*
import androidx.lifecycle.MutableLiveData
import androidx.recyclerview.widget.RecyclerView
import com.alibaba.android.vlayout.DelegateAdapter
import com.alibaba.android.vlayout.VirtualLayoutManager
......@@ -14,14 +15,18 @@ import com.mints.street.R
import com.mints.street.adapter.DialogMapContentAdapter
import com.mints.street.adapter.DialogMapHeadAdapter
import com.mints.street.adapter.DialogMapTailAdapter
import com.mints.street.bean.MapStyleSortBean
/**MutableList<?>
* @author 冯瑞雨
* @date 2020/6/18 14:27
* 弹出框
*/
class DialogMapStyle(var mContext: Context) : BaseDialogFragment() {
private var recycler: RecyclerView?=null
class DialogMapStyle(
var mContext: Context,
var mapStyleBean: MapStyleSortBean?,val onMapStyleDataChange :OnMapStyleDataChange?=null
) : BaseDialogFragment() {
private var recycler: RecyclerView? = null
private var vLayout: VirtualLayoutManager? = null
private var mAdapter: DelegateAdapter? = null
override fun onStart() {
......@@ -58,16 +63,37 @@ class DialogMapStyle(var mContext: Context) : BaseDialogFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mapStyleBean?.mapStyleSort?.forEach {
mAdapter?.addAdapter(DialogMapHeadAdapter(mContext, it.name))
mAdapter?.addAdapter(
DialogMapContentAdapter(mContext, it.mapStyleList,
object : DialogMapContentAdapter.OnItemMapStyleChange {
override fun onItemChange(type: Int) {
onMapStyleDataChange?.onMapStyleItemChange(type)
}
})
)
}
for (index in 1..3){
mAdapter?.addAdapter(DialogMapHeadAdapter(mContext, "google"))
mAdapter?.addAdapter(DialogMapContentAdapter(mContext, listOf("1","2","3")))
mAdapter?.addAdapter(DialogMapHeadAdapter(mContext, "地图设置"))
mAdapter?.addAdapter(
DialogMapTailAdapter(mContext, mapStyleBean,
object : DialogMapTailAdapter.OnDataChange {
override fun onRecommendedPlacesChange(isSelected: Boolean) {
onMapStyleDataChange?.onRecommendedPlacesChange(isSelected)
}
mAdapter?.addAdapter(DialogMapHeadAdapter(mContext, "google"))
mAdapter?.addAdapter(DialogMapTailAdapter(mContext))
override fun onStreetViewMapChange(isSelected: Boolean) {
onMapStyleDataChange?.onStreetViewMapChange(isSelected)
}
})
)
}
interface OnMapStyleDataChange{
fun onMapStyleItemChange(type:Int)
fun onRecommendedPlacesChange(isSelected: Boolean)
fun onStreetViewMapChange(isSelected: Boolean)
}
}
package com.mints.street.widget.dialog
import android.content.Context
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.FragmentActivity
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.RecyclerView
import com.alibaba.android.vlayout.DelegateAdapter
import com.alibaba.android.vlayout.VirtualLayoutManager
import com.baidu.mapapi.model.LatLng
import com.baidu.mapapi.utils.DistanceUtil
import com.fry.base.utils.ImageLoader
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.mints.street.R
import com.mints.street.adapter.ItemHotViewAdapter
import com.mints.street.bean.GPS
import com.mints.street.bean.ViewRecommedBean
import com.mints.street.main.home.HomeFragment
import com.mints.street.main.home.HomeViewModel
import com.mints.street.webview.MintsWebViewActivity
import com.mints.street.widget.GridItemDecoration
import com.mints.street.widget.XCRoundRectImageView
import me.goldze.mvvmhabit.utils.RxUtils
import java.text.DecimalFormat
class ViewRecommedDialog (context: FragmentActivity, viewModel: HomeViewModel, homeFragment: HomeFragment) {
class ViewRecommedDialog (context: Context?, bean: ViewRecommedBean?,gps:GPS?,homeViewModel: HomeViewModel) {
private var mBottomSheetDialog: BottomSheetDialog?=null
private var context: FragmentActivity
private var viewModel: HomeViewModel?=null
private var homeFragment: HomeFragment?=null
private var context: Context?=null
private var bean: ViewRecommedBean?=null
private var homeViewModel: HomeViewModel?=null
private var gps: GPS?=null
init {
this.context=context
this.viewModel=viewModel
this.homeFragment=homeFragment
this.bean=bean
this.gps=gps
this.homeViewModel=homeViewModel
}
//
fun init(): ViewRecommedDialog {
//创建弹窗
if (mBottomSheetDialog!=null) return this
mBottomSheetDialog= BottomSheetDialog(context)
mBottomSheetDialog= BottomSheetDialog(context!!)
val view1: View = LayoutInflater.from(context).inflate(R.layout.layout_viewrecommed,null)
mBottomSheetDialog!!.setContentView(view1)
mBottomSheetDialog!!.window!!.findViewById<View>(R.id.design_bottom_sheet).setBackgroundColor(Color.TRANSPARENT)
val iv_close: ImageView =view1.findViewById(R.id.iv_close)
val recycler_view: RecyclerView =view1.findViewById(R.id.recycler_view)
val viewname: TextView =view1.findViewById(R.id.viewname)
val tvDistance: TextView =view1.findViewById(R.id.tv_distance)
val image1: XCRoundRectImageView =view1.findViewById(R.id.image1)
val tvDescribe: TextView =view1.findViewById(R.id.tv_describe)
val textView5: TextView =view1.findViewById(R.id.textView5)
viewModel?.getHotView()
viewModel?.hotviewData?.observe(homeFragment!!, androidx.lifecycle.Observer {
viewname.text = bean?.name
val a = DistanceUtil.getDistance(LatLng(bean?.blat?.toDouble()?:0.0,
bean?.blng?.toDouble()?:0.0) ,LatLng(
gps?.lat?:0.0,gps?.lng?:0.0))
tvDistance.text = "距离${DecimalFormat("0.00").format(a/1000).toString()}km"
ImageLoader.ImageBuilder.with(context)
.setUrl(bean?.img).setTargetView(image1).start()
tvDescribe.text = bean?.desc
RxUtils.onMultiClick(textView5){
homeViewModel?.authorized( bean?.bvid,bean?.name)
})
iv_close.setOnClickListener{
mBottomSheetDialog!!.dismiss()
}
return this
}
......
......@@ -25,8 +25,8 @@
<ImageView
android:visibility="gone"
android:id="@+id/image_map_history"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginTop="15dp"
android:src="@mipmap/map_history_icon"
app:layout_constraintEnd_toEndOf="parent"
......@@ -34,8 +34,8 @@
<ImageView
android:id="@+id/image_location_icon"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginBottom="220dp"
android:layout_marginTop="15dp"
android:src="@mipmap/location_icon"
......@@ -44,18 +44,18 @@
<ImageView
android:id="@+id/image_map_change_icon"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginBottom="220dp"
android:layout_marginTop="35dp"
android:layout_marginTop="40dp"
android:src="@mipmap/map_change_icon"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
/>
<ImageView
android:id="@+id/ly_hotview"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_width="40dp"
android:layout_height="40dp"
android:padding="3dp"
android:layout_marginTop="10dp"
android:src="@mipmap/icon_hotview"
......@@ -64,8 +64,8 @@
<LinearLayout
android:id="@+id/map_a_d"
android:layout_width="31dp"
android:layout_height="63dp"
android:layout_width="36dp"
android:layout_height="73dp"
android:layout_marginBottom="10dp"
android:layout_marginEnd="2dp"
android:background="@drawable/shape_gold_card"
......@@ -77,24 +77,26 @@
<ImageView
android:id="@+id/image_in"
android:layout_width="31dp"
android:layout_height="31dp"
android:layout_width="36dp"
android:layout_height="36dp"
android:padding="10dp"
android:src="@mipmap/scale_add_icon" />
<View
android:layout_width="wrap_content"
android:layout_height="1dp"
android:layout_marginEnd="12dp"
android:layout_marginStart="12dp"
android:background="@color/color_333" />
<ImageView
android:id="@+id/image_out"
android:layout_width="31dp"
android:layout_height="31dp"
android:layout_width="36dp"
android:layout_height="36dp"
android:padding="10dp"
android:src="@mipmap/scale_shrink_icon" />
<View
android:layout_width="wrap_content"
android:layout_height="0.5dp"
android:layout_marginEnd="12dp"
android:layout_marginStart="12dp"
android:background="@color/color_333" />
</LinearLayout>
......
......@@ -17,11 +17,12 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@mipmap/vip_google_bg"
android:layout_width="105dp"
android:layout_height="64dp"
tools:src="@mipmap/vip_google_bg"
/>
<ImageView
android:id="@+id/iv_selected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@id/image"
......@@ -35,8 +36,9 @@
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color_121B32"
tools:text="天地图卫星"
android:textColor="@color/color_505050"
android:textSize="12dp"
tools:text="谷歌卫星混合"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
......
......@@ -5,6 +5,7 @@
android:layout_height="match_parent"
android:background="@color/white">
<androidx.recyclerview.widget.RecyclerView
android:paddingTop="30dp"
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
......
......@@ -44,7 +44,6 @@
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_alignParentEnd="true"
app:isOpened="true"
android:layout_marginRight="10dp"
app:layout_constraintTop_toTopOf="@id/recommend"
app:layout_constraintBottom_toBottomOf="@id/recommend"
......@@ -57,7 +56,6 @@
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_alignParentEnd="true"
app:isOpened="true"
android:layout_marginRight="10dp"
app:layout_constraintTop_toTopOf="@id/street_view"
app:layout_constraintBottom_toBottomOf="@id/street_view"
......
......@@ -11,7 +11,7 @@
android:id="@+id/bmapView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="90dp"
android:layout_marginBottom="80dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
......@@ -31,8 +31,8 @@
<ImageView
android:id="@+id/image_map_history"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginTop="25dp"
android:src="@mipmap/map_history_icon"
android:visibility="gone"
......@@ -41,8 +41,8 @@
<ImageView
android:id="@+id/ly_hotview"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_width="40dp"
android:layout_height="40dp"
android:padding="3dp"
android:layout_marginTop="10dp"
android:src="@mipmap/icon_hotview"
......@@ -51,8 +51,8 @@
<ImageView
android:id="@+id/image_location_icon"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginTop="15dp"
android:layout_marginBottom="220dp"
android:src="@mipmap/location_icon"
......@@ -60,8 +60,8 @@
app:layout_constraintEnd_toEndOf="parent" />
<ImageView
android:id="@+id/image_map_change_icon"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginBottom="220dp"
android:layout_marginTop="35dp"
android:src="@mipmap/map_change_icon"
......@@ -71,8 +71,8 @@
<LinearLayout
android:id="@+id/map_a_d"
android:layout_width="31dp"
android:layout_height="63dp"
android:layout_width="36dp"
android:layout_height="73dp"
android:layout_marginEnd="2dp"
android:layout_marginBottom="10dp"
android:background="@drawable/shape_gold_card"
......@@ -82,24 +82,25 @@
<ImageView
android:id="@+id/image_in"
android:layout_width="31dp"
android:layout_height="31dp"
android:layout_width="36dp"
android:layout_height="36dp"
android:padding="10dp"
android:src="@mipmap/scale_add_icon" />
<View
android:layout_width="wrap_content"
android:layout_height="1dp"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:background="@color/color_333" />
<ImageView
android:id="@+id/image_out"
android:layout_width="31dp"
android:layout_height="31dp"
android:layout_width="36dp"
android:layout_height="36dp"
android:padding="10dp"
android:src="@mipmap/scale_shrink_icon" />
<View
android:layout_width="wrap_content"
android:layout_height="0.5dp"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:background="@color/color_333" />
</LinearLayout>
......
......@@ -12,7 +12,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:text="景点名称"
tools:text="景点名称"
android:textColor="@color/black"
android:textSize="18dp"
app:layout_constraintStart_toStartOf="parent"
......@@ -33,7 +33,6 @@
android:id="@+id/tv_distance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="距离"
android:textColor="#99000000"
android:textSize="14dp"
app:layout_constraintBottom_toBottomOf="@+id/viewname"
......@@ -61,7 +60,6 @@
android:layout_width="0dp"
android:layout_height="120dp"
android:layout_marginTop="10dp"
android:src="@mipmap/icon_card6"
app:layout_constraintEnd_toEndOf="@+id/textView5"
app:layout_constraintStart_toStartOf="@+id/viewname"
app:layout_constraintTop_toBottomOf="@+id/viewname"
......
......@@ -20,6 +20,7 @@
<color name="color_E6E6E6">#E6E6E6</color>
<color name="color_555">#555555</color>
<color name="color_8F6D21">#8F6D21</color>
<color name="color_505050">#505050</color>
<color name="color_0000">#00000000</color>
<color name="color_60000000">#60000000</color>
<color name="color_2B3238">#2B3238</color>
......
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