Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
p x
MapMultiEngine
Commits
b785e7cb
Commit
b785e7cb
authored
Jun 24, 2025
by
p x
Browse files
四维搜索
parent
0665639d
Changes
54
Show whitespace changes
Inline
Side-by-side
app/build.gradle.kts
View file @
b785e7cb
...
...
@@ -33,6 +33,10 @@ android {
kotlinOptions
{
jvmTarget
=
"11"
}
buildFeatures
{
// dataBinding = true
viewBinding
=
true
}
}
...
...
app/src/main/java/com/sd/mapmultiengine/MainActivity.kt
View file @
b785e7cb
package
com.sd.mapmultiengine
import
android.os.Bundle
import
androidx.activity.enableEdgeToEdge
import
androidx.appcompat.app.AppCompatActivity
import
androidx.core.view.ViewCompat
import
androidx.core.view.WindowInsetsCompat
import
com.sd.maplibrary.MAP_TYPE
import
com.sd.maplibrary.MSDKInitializer
import
com.sd.maplibrary.OnSdkInitCb
import
com.sd.mapmultiengine.databinding.ActivityMainBinding
class
MainActivity
:
AppCompatActivity
()
{
// val yy:Yy by viewModels()
private
lateinit
var
binding
:
ActivityMainBinding
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
enableEdgeToEdge
()
setContentView
(
R
.
layout
.
activity_main
)
ViewCompat
.
setOnApplyWindowInsetsListener
(
findViewById
(
R
.
id
.
main
))
{
v
,
insets
->
val
systemBars
=
insets
.
getInsets
(
WindowInsetsCompat
.
Type
.
systemBars
())
v
.
setPadding
(
systemBars
.
left
,
systemBars
.
top
,
systemBars
.
right
,
systemBars
.
bottom
)
insets
}
// enableEdgeToEdge()
binding
=
ActivityMainBinding
.
inflate
(
layoutInflater
)
setContentView
(
binding
.
root
)
// ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
// val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
// v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
// insets
// }
initMap
()
}
fun
initMap
(){
MSDKInitializer
.
initializeMap
(
this
,
MAP_TYPE
.
AMAP
)
fun
initMap
()
{
MSDKInitializer
.
initializeMap
(
this
,
MAP_TYPE
.
MINE
,
object
:
OnSdkInitCb
{
override
fun
onInitSuccess
(
map_type
:
MAP_TYPE
)
{
println
(
"--------onMapInitSuccess---map_type = ${map_type}"
)
}
override
fun
onInitFailed
(
msg
:
String
?)
{
}
override
fun
onPerDenied
()
{
}
})
}
}
\ No newline at end of file
app/src/main/java/com/sd/mapmultiengine/Yy.kt
0 → 100644
View file @
b785e7cb
package
com.sd.mapmultiengine
import
androidx.lifecycle.ViewModel
class
Yy
:
ViewModel
()
{
}
\ No newline at end of file
app/src/main/res/layout/activity_main.xml
View file @
b785e7cb
<?xml version="1.0" encoding="utf-8"?>
<
androidx.constraintlayout.widget.Constraint
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
Linear
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/main"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".MainActivity
"
>
android:orientation=
"vertical
"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"Hello World!"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<com.sd.maplibrary.ui.MapMultiView
android:id=
"@+id/mapMultiView"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
</LinearLayout>
gradle.properties
View file @
b785e7cb
...
...
@@ -21,3 +21,4 @@ kotlin.code.style=official
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass
=
true
android.defaults.buildfeatures.databinding
=
true
\ No newline at end of file
gradle/libs.versions.toml
View file @
b785e7cb
...
...
@@ -10,6 +10,7 @@ material = "1.12.0"
activity
=
"1.10.1"
constraintlayout
=
"2.2.1"
[libraries]
androidx-core-ktx
=
{
group
=
"androidx.core"
,
name
=
"core-ktx"
,
version.ref
=
"coreKtx"
}
junit
=
{
group
=
"junit"
,
name
=
"junit"
,
version.ref
=
"junit"
}
...
...
@@ -20,6 +21,7 @@ material = { group = "com.google.android.material", name = "material", version.r
androidx-activity
=
{
group
=
"androidx.activity"
,
name
=
"activity"
,
version.ref
=
"activity"
}
androidx-constraintlayout
=
{
group
=
"androidx.constraintlayout"
,
name
=
"constraintlayout"
,
version.ref
=
"constraintlayout"
}
[plugins]
android-application
=
{
id
=
"com.android.application"
,
version.ref
=
"agp"
}
kotlin-android
=
{
id
=
"org.jetbrains.kotlin.android"
,
version.ref
=
"kotlin"
}
...
...
maplibrary/build.gradle.kts
View file @
b785e7cb
plugins
{
alias
(
libs
.
plugins
.
android
.
library
)
alias
(
libs
.
plugins
.
kotlin
.
android
)
id
(
"kotlin-kapt"
)
}
android
{
...
...
@@ -30,6 +31,10 @@ android {
kotlinOptions
{
jvmTarget
=
"11"
}
buildFeatures
{
// dataBinding = true
viewBinding
=
true
}
}
//repositories {
...
...
@@ -43,11 +48,21 @@ dependencies {
implementation
(
libs
.
androidx
.
core
.
ktx
)
implementation
(
libs
.
androidx
.
appcompat
)
implementation
(
libs
.
material
)
implementation
(
libs
.
androidx
.
constraintlayout
)
testImplementation
(
libs
.
junit
)
androidTestImplementation
(
libs
.
androidx
.
junit
)
androidTestImplementation
(
libs
.
androidx
.
espresso
.
core
)
//网络
implementation
(
"com.squareup.retrofit2:retrofit:2.9.0"
)
implementation
(
"com.squareup.retrofit2:converter-gson:2.9.0"
)
// 权限请求框架
implementation
(
"com.guolindev.permissionx:permissionx:1.8.1"
)
// ViewModel
implementation
(
"androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2"
)
//fragment-ktx
implementation
(
"androidx.fragment:fragment-ktx:1.8.0"
)
// https://github.com/CymChad/BaseRecyclerViewAdapterHelper/ RecyclerView 适配器
implementation
(
"io.github.cymchad:BaseRecyclerViewAdapterHelper4:4.1.7"
)
}
\ No newline at end of file
maplibrary/src/main/AndroidManifest.xml
View file @
b785e7cb
...
...
@@ -7,40 +7,27 @@
tools:ignore=
"ProtectedPermissions"
/>
<uses-permission
android:name=
"android.permission.INTERACT_ACROSS_USERS_FULL"
tools:ignore=
"ProtectedPermissions"
/>
<!-- 允许程序打开网络套接字 -->
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<!-- 允许程序访问网络状态 -->
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<!-- 允许用户改变WiFi连接状态 -->
<uses-permission
android:name=
"android.permission.CHANGE_WIFI_STATE"
/>
<!-- 程序访问粗略位置 -->
<uses-permission
android:name=
"android.permission.ACCESS_COARSE_LOCATION"
/>
<!-- 允许用户访问精确位置 -->
<uses-permission
android:name=
"android.permission.ACCESS_FINE_LOCATION"
/>
<!-- Android Q 允许后台运行定位 -->
<uses-permission
android:name=
"android.permission.ACCESS_BACKGROUND_LOCATION"
/>
<!-- 允许程序读取手机状态 -->
<uses-permission
android:name=
"android.permission.READ_PHONE_STATE"
/>
<!-- 打电话的权限 -->
<uses-permission
android:name=
"android.permission.CALL_PHONE"
/>
<!-- 从SDCard读出数据权限 -->
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<!-- 允许程序写入外部存储设备 -->
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<!-- 允许程序读取所有者数据 -->
<uses-permission
android:name=
"android.permission.READ_OWNER_DATA"
/>
<!-- 访问WiFi状态,需要WiFi信息用于网络定位 -->
<uses-permission
android:name=
"android.permission.ACCESS_WIFI_STATE"
/>
<!-- 访问网络的变化, 需要某些信息用于网络定位 -->
<uses-permission
android:name=
"android.permission.CHANGE_NETWORK_STATE"
/>
<!-- 8.0 安装未知程序权限 -->
tools:ignore=
"ProtectedPermissions"
/>
<!-- 允许程序打开网络套接字 -->
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<!-- 允许程序访问网络状态 -->
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<!-- 允许用户改变WiFi连接状态 -->
<uses-permission
android:name=
"android.permission.CHANGE_WIFI_STATE"
/>
<!-- 程序访问粗略位置 -->
<uses-permission
android:name=
"android.permission.ACCESS_COARSE_LOCATION"
/>
<!-- 允许用户访问精确位置 -->
<uses-permission
android:name=
"android.permission.ACCESS_FINE_LOCATION"
/>
<!-- Android Q 允许后台运行定位 -->
<uses-permission
android:name=
"android.permission.ACCESS_BACKGROUND_LOCATION"
/>
<!-- 允许程序读取手机状态 -->
<uses-permission
android:name=
"android.permission.READ_PHONE_STATE"
/>
<!-- 打电话的权限 -->
<uses-permission
android:name=
"android.permission.CALL_PHONE"
/>
<!-- 从SDCard读出数据权限 -->
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<!-- 允许程序写入外部存储设备 -->
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<!-- 允许程序读取所有者数据 -->
<uses-permission
android:name=
"android.permission.READ_OWNER_DATA"
/>
<!-- 访问WiFi状态,需要WiFi信息用于网络定位 -->
<uses-permission
android:name=
"android.permission.ACCESS_WIFI_STATE"
/>
<!-- 访问网络的变化, 需要某些信息用于网络定位 -->
<uses-permission
android:name=
"android.permission.CHANGE_NETWORK_STATE"
/>
<!-- 8.0 安装未知程序权限 -->
<uses-permission
android:name=
"android.permission.REQUEST_INSTALL_PACKAGES"
/>
<application
android:networkSecurityConfig=
"@xml/network_security_config"
android:supportsRtl=
"true"
>
<activity
android:name=
".ui.SearchActivity"
/>
<uses-library
android:name=
"org.apache.http.legacy"
android:required=
"false"
/>
...
...
@@ -48,8 +35,6 @@
<meta-data
android:name=
"com.minedata.minenavi.apikey"
android:value=
"57ac7a0d56494912a0c28e651fa4a40a"
/>
</application>
</manifest>
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/MSDKInitializer.kt
View file @
b785e7cb
...
...
@@ -2,7 +2,6 @@ package com.sd.maplibrary
import
android.Manifest
import
android.content.Context
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.FragmentActivity
import
com.minedata.minenavi.SDKInitializer
import
com.minedata.minenavi.SDKInitializer.InitListener
...
...
@@ -16,70 +15,95 @@ import com.sd.maplibrary.utils.ToastHelper
* MINE =四维
* ***/
enum
class
MAP_TYPE
{
AMAP
,
MINE
MINE
,
AMAP
}
class
UserCtx
{
var
mContext
:
Context
?
=
null
var
map_type
:
MAP_TYPE
=
MAP_TYPE
.
MINE
companion
object
{
val
instance
:
UserCtx
by
lazy
{
UserCtx
()
}
}
}
interface
OnSdkInitCb
{
/***初始化成功**/
fun
onInitSuccess
(
map_type
:
MAP_TYPE
)
/***初始化成失败**/
fun
onInitFailed
(
msg
:
String
?)
/***权限被拒**/
fun
onPerDenied
()
}
object
MSDKInitializer
{
private
var
onSdkInitCb
:
OnSdkInitCb
?
=
null
fun
initializeMap
(
context
:
Context
,
map_type
:
MAP_TYPE
)
{
fun
initializeMap
(
context
:
Context
,
map_type
:
MAP_TYPE
,
onSdkInitCb
:
OnSdkInitCb
?)
{
this
@MSDKInitializer
.
onSdkInitCb
=
onSdkInitCb
UserCtx
.
instance
.
mContext
=
context
UserCtx
.
instance
.
map_type
=
map_type
requestPers
()
// when (map_type) {
// MAP_TYPE.AMAP -> {
//
// }
// MAP_TYPE.MINE -> {
//
//
// }
// }
}
fun
getMapType
():
MAP_TYPE
{
return
UserCtx
.
instance
.
map_type
}
private
fun
mapTypeInit
()
{
val
ctx
=
UserCtx
.
instance
.
mContext
when
(
UserCtx
.
instance
.
map_type
)
{
MAP_TYPE
.
AMAP
->
{
}
MAP_TYPE
.
MINE
->
{
// 隐私合规接口
// SDKInitializer.setAgreePrivacy(true)
// if (SDKInitializer.getServerHost().equals("mineservice.minedata.cn")) {
// SDKInitializer.setStyleUrl(
// MineMap.UrlType.basicMap,
// "https://service.minedata.cn/map/solu/style/1359221494104252416"
// )
// }
// 设置地图坐标系
// SDKInitializer.setCoordType(CoordType.GCJ02)
// SDKInitializer.setSearchUrlType(SearchUrlType.v1)
// SDKInitializer.initialize(context, object : InitListener {
// override fun onInitSuccess() {
// }
//
// override fun onInitFailed(msg: String?) {
// }
// })
SDKInitializer
.
setAgreePrivacy
(
true
)
//设置地图坐标系
SDKInitializer
.
setCoordType
(
CoordType
.
GCJ02
)
SDKInitializer
.
setSearchUrlType
(
SearchUrlType
.
v1
)
SDKInitializer
.
initialize
(
ctx
,
object
:
InitListener
{
override
fun
onInitSuccess
()
{
onSdkInitCb
?.
onInitSuccess
(
UserCtx
.
instance
.
map_type
)
}
override
fun
onInitFailed
(
msg
:
String
?)
{
onSdkInitCb
?.
onInitFailed
(
msg
)
}
})
}
else
->
{
fun
requestPers
()
{
if
(
UserCtx
.
instance
.
mContext
is
FragmentActivity
||
UserCtx
.
instance
.
mContext
is
Fragment
)
{
}
}
}
private
fun
requestPers
()
{
if
(
UserCtx
.
instance
.
mContext
is
FragmentActivity
)
{
var
list
=
listOf
(
Manifest
.
permission
.
ACCESS_COARSE_LOCATION
,
Manifest
.
permission
.
ACCESS_FINE_LOCATION
,
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
,
Manifest
.
permission
.
READ_EXTERNAL_STORAGE
,
Manifest
.
permission
.
READ_PHONE_STATE
,
Manifest
.
permission
.
ACCESS_BACKGROUND_LOCATION
)
PermissionX
.
init
(
UserCtx
.
instance
.
mContext
as
FragmentActivity
)
.
permissions
(
list
)
.
onExplainRequestReason
{
scope
,
deniedList
->
scope
.
showRequestReasonDialog
(
deniedList
,
"
Adas
需要同意以下授权才能正常使用"
,
"需要同意以下授权才能正常使用"
,
"好的"
,
"取消"
)
...
...
@@ -89,17 +113,18 @@ object MSDKInitializer {
// }
.
request
{
allGranted
,
grantedList
,
deniedList
->
if
(
allGranted
)
{
mapTypeInit
()
}
else
{
// ToastHelper.showShort(this, "权限被拒")
ToastHelper
.
showShort
(
UserCtx
.
instance
.
mContext
!!
,
"权限被拒"
)
onSdkInitCb
?.
onPerDenied
()
}
}
}
else
{
ToastHelper
.
showShort
(
UserCtx
.
instance
.
mContext
!!
,
"请在正确的地方初始化"
)
//
ToastHelper.showShort(UserCtx.instance.mContext!!, "请在正确的地方初始化")
}
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/adapter/PoiAdapter.kt
0 → 100644
View file @
b785e7cb
package
com.sd.maplibrary.adapter
//import kotlinx.android.synthetic.main.poi_search_list_item.view.*
import
android.content.Context
import
android.graphics.Color
import
android.text.SpannableString
import
android.text.style.ForegroundColorSpan
import
android.view.LayoutInflater
import
android.view.ViewGroup
import
androidx.core.text.set
import
androidx.recyclerview.widget.RecyclerView
import
com.chad.library.adapter4.BaseQuickAdapter
import
com.minedata.minenavi.addons.DistanceBean
import
com.sd.maplibrary.bean.PoiSearchBean
import
com.sd.maplibrary.databinding.PoiSearchListItemBinding
import
com.sd.maplibrary.utils.MyGeoTools
class
PoiAdapter
:
BaseQuickAdapter
<
PoiSearchBean
,
PoiAdapter
.
PoiSH
>()
{
init
{
// addChildClickViewIds(R.id.tv_fouc)
}
//用户的搜素关键字
var
usrSearchStr
=
""
override
fun
onCreateViewHolder
(
context
:
Context
,
parent
:
ViewGroup
,
viewType
:
Int
):
PoiSH
{
return
PoiSH
(
parent
)
}
inner
class
PoiSH
(
parent
:
ViewGroup
,
val
binding
:
PoiSearchListItemBinding
=
PoiSearchListItemBinding
.
inflate
(
LayoutInflater
.
from
(
parent
.
context
),
parent
,
false
)
)
:
RecyclerView
.
ViewHolder
(
binding
.
root
)
{
private
var
poi_title
=
binding
.
poiTitle
private
var
tv_num
=
binding
.
tvNum
fun
show
(
bean
:
PoiSearchBean
)
{
tv_num
.
text
=
(
bindingAdapterPosition
+
1
).
toString
()
if
(
usrSearchStr
.
isNotEmpty
())
{
var
tempStr
=
bean
.
title
var
star
=
tempStr
.
indexOf
(
usrSearchStr
)
if
(
star
!=
-
1
)
{
var
spannableString
=
SpannableString
(
tempStr
)
var
c
=
ForegroundColorSpan
(
Color
.
parseColor
(
"#2C7FFA"
))
var
end
=
star
+
usrSearchStr
.
count
()
spannableString
.
set
(
star
..
end
,
c
)
poi_title
.
text
=
spannableString
}
else
{
poi_title
.
text
=
bean
.
title
}
}
else
{
poi_title
.
text
=
bean
.
title
}
binding
.
poiDes
.
text
=
bean
.
snippet
val
distanceBean
:
DistanceBean
=
MyGeoTools
.
cauMyLocDistance
(
bean
.
lat
,
bean
.
lng
)
binding
.
tvDistan
.
text
=
"${distanceBean.distanceValue}${distanceBean.distanceUnit}"
}
fun
setListener
()
{
// tv_fouc.clicks().throttleFirst(1, TimeUnit.SECONDS).subscribe {
// focusOn(layoutPosition)
// }
}
}
override
fun
onBindViewHolder
(
holder
:
PoiSH
,
position
:
Int
,
item
:
PoiSearchBean
?)
{
holder
.
show
(
item
!!
)
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/base/BaseActivity.kt
0 → 100644
View file @
b785e7cb
package
com.sd.maplibrary.base
import
androidx.appcompat.app.AppCompatActivity
import
com.sd.maplibrary.ui.dialog.LoadDialogFragment
open
class
BaseActivity
:
AppCompatActivity
()
{
private
var
loadDialogFragment
:
LoadDialogFragment
?
=
null
fun
showLoading
(
msg
:
String
)
{
// loadDialogFragment?.dismiss()
loadDialogFragment
=
LoadDialogFragment
.
newInstance
(
msg
)
loadDialogFragment
?.
show
(
supportFragmentManager
,
"loadDialog"
)
}
fun
dismisLoading
()
{
loadDialogFragment
?.
dismissNow
()
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/base/BaseFragment.kt
0 → 100644
View file @
b785e7cb
package
com.sd.maplibrary.base
import
androidx.fragment.app.Fragment
import
com.sd.maplibrary.ui.dialog.LoadDialogFragment
open
class
BaseFragment
:
Fragment
()
{
private
var
loadDialogFragment
:
LoadDialogFragment
?
=
null
fun
showLoading
(
msg
:
String
)
{
// loadDialogFragment?.dismiss()
loadDialogFragment
=
LoadDialogFragment
.
newInstance
(
msg
)
loadDialogFragment
?.
show
(
parentFragmentManager
,
"loadDialog"
)
}
fun
dismisLoading
()
{
loadDialogFragment
?.
dismissNow
()
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/bean/MyLocBean.kt
0 → 100644
View file @
b785e7cb
package
com.sd.maplibrary.bean
class
MyLocBean
{
// 返回逆地理编码结果所在区(县)的编码。
var
adCode
=
""
//当前经纬度
var
curLat
=
0.0
var
curLng
=
0.0
var
city
=
""
var
cityCode
=
""
//速度
var
speed
=
0f
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/bean/PoiSearchBean.kt
0 → 100644
View file @
b785e7cb
package
com.sd.maplibrary.bean
/**搜索poi**/
class
PoiSearchBean
{
var
lat
=
0.0
var
lng
=
0.0
var
cityName
=
""
var
adCode
=
""
//POI的名称
var
title
=
""
//POI的地址
var
snippet
=
""
//POI距离中心点的距离。
var
distance
=
0
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/fragments/AMapFragment.kt
0 → 100644
View file @
b785e7cb
package
com.sd.maplibrary.fragments
import
android.os.Bundle
import
androidx.fragment.app.Fragment
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
com.sd.maplibrary.R
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
//private const val ARG_PARAM1 = "param1"
//private const val ARG_PARAM2 = "param2"
/**
* 高德地图
*/
class
AMapFragment
:
Fragment
()
{
// private var param1: String? = null
// private var param2: String? = null
// override fun onCreate(savedInstanceState: Bundle?) {
// super.onCreate(savedInstanceState)
// arguments?.let {
// param1 = it.getString(ARG_PARAM1)
// param2 = it.getString(ARG_PARAM2)
// }
// }
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?
):
View
?
{
// Inflate the layout for this fragment
return
inflater
.
inflate
(
R
.
layout
.
fragment_a_map
,
container
,
false
)
}
companion
object
{
@JvmStatic
fun
newInstance
()
=
AMapFragment
()
// @JvmStatic
// fun newInstance(param1: String, param2: String) =
// AMapFragment().apply {
// arguments = Bundle().apply {
// putString(ARG_PARAM1, param1)
// putString(ARG_PARAM2, param2)
// }
// }
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/fragments/ForeMapFragment.kt
0 → 100644
View file @
b785e7cb
package
com.sd.maplibrary.fragments
import
android.app.Activity
import
android.content.Intent
import
android.os.Bundle
import
android.util.Log
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
androidx.activity.result.contract.ActivityResultContracts
import
androidx.activity.viewModels
import
androidx.fragment.app.activityViewModels
import
com.sd.maplibrary.MAP_TYPE
import
com.sd.maplibrary.MSDKInitializer
import
com.sd.maplibrary.base.BaseFragment
import
com.sd.maplibrary.databinding.FragmentForeMapBinding
import
com.sd.maplibrary.ui.SearchActivity
import
com.sd.maplibrary.viewmodels.FourMapOpVm
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
//private const val ARG_PARAM1 = "param1"
//private const val ARG_PARAM2 = "param2"
/**
*四维地图
*/
class
ForeMapFragment
:
BaseFragment
()
{
// private var param1: String? = null
// private var param2: String? = null
// override fun onCreate(savedInstanceState: Bundle?) {
// super.onCreate(savedInstanceState)
// arguments?.let {
// param1 = it.getString(ARG_PARAM1)
// param2 = it.getString(ARG_PARAM2)
// }
// }
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?
):
View
{
binding
=
FragmentForeMapBinding
.
inflate
(
inflater
,
container
,
false
)
// Inflate the layout for this fragment
return
binding
.
root
// return inflater.inflate(R.layout.fragment_fore_map, container, false)
}
private
lateinit
var
binding
:
FragmentForeMapBinding
//四维地图操作
private
val
fourMapOpVm
:
FourMapOpVm
by
activityViewModels
()
//跳转到搜索界面
private
var
searchAct
=
registerForActivityResult
(
ActivityResultContracts
.
StartActivityForResult
(),
{
result
->
if
(
result
.
resultCode
==
Activity
.
RESULT_OK
)
{
val
intent
=
result
.
data
val
returnedData
=
intent
?.
getStringExtra
(
"123"
)
Log
.
d
(
"----"
,
"----Returned data: $returnedData"
)
}
})
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
initView
()
setLis
()
fourMapOpVm
.
starLoc
()
}
private
fun
initView
(){
when
(
MSDKInitializer
.
getMapType
()){
MAP_TYPE
.
MINE-
>{
fourMapOpVm
.
init
(
binding
.
mapView
)
// fourMapOpVm.mOnMapViewListener=this@ForeMapFragment
}
MAP_TYPE
.
AMAP-
>{
}
}
}
private
fun
setLis
()
{
binding
.
sLayout
.
searchLl
.
setOnClickListener
{
val
intent
=
Intent
(
requireContext
(),
SearchActivity
::
class
.
java
)
searchAct
.
launch
(
intent
)
}
}
override
fun
onPause
()
{
super
.
onPause
()
binding
.
mapView
.
onPause
()
}
override
fun
onResume
()
{
super
.
onResume
()
binding
.
mapView
.
onResume
()
}
override
fun
onDestroy
()
{
super
.
onDestroy
()
fourMapOpVm
.
stopLoc
()
binding
.
mapView
.
onDestroy
()
}
companion
object
{
@JvmStatic
fun
newInstance
()
=
ForeMapFragment
()
// @JvmStatic
// fun newInstance(param1: String, param2: String) =
// ForeMapFragment().apply {
// arguments = Bundle().apply {
// putString(ARG_PARAM1, param1)
// putString(ARG_PARAM2, param2)
// }
// }
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/ui/MapMultiView.kt
0 → 100644
View file @
b785e7cb
package
com.sd.maplibrary.ui
import
android.content.Context
import
android.util.AttributeSet
import
android.view.LayoutInflater
import
android.widget.LinearLayout
import
androidx.fragment.app.FragmentActivity
import
com.sd.maplibrary.MAP_TYPE
import
com.sd.maplibrary.MSDKInitializer
import
com.sd.maplibrary.R
import
com.sd.maplibrary.databinding.MultiViewBinding
import
com.sd.maplibrary.fragments.AMapFragment
import
com.sd.maplibrary.fragments.ForeMapFragment
class
MapMultiView
:
LinearLayout
{
constructor
(
context
:
Context
?)
:
super
(
context
)
{
init
(
null
,
0
)
}
constructor
(
context
:
Context
?,
attrs
:
AttributeSet
?)
:
super
(
context
,
attrs
)
{
init
(
attrs
,
0
)
}
constructor
(
context
:
Context
?,
attrs
:
AttributeSet
?,
defStyleAttr
:
Int
)
:
super
(
context
,
attrs
,
defStyleAttr
)
{
init
(
attrs
,
defStyleAttr
)
}
private
lateinit
var
binding
:
MultiViewBinding
//四维地图
private
val
foreMapFragment
by
lazy
{
ForeMapFragment
.
newInstance
()
}
//高德地图
private
val
aMapFragment
by
lazy
{
AMapFragment
.
newInstance
()
}
private
var
enmuValue
=
0
private
fun
init
(
attrs
:
AttributeSet
?,
defStyle
:
Int
)
{
// context.withStyledAttributes(attrs, R.styleable.MapMultiView, defStyle, 0) {
// if (hasValue(R.styleable.MapMultiView_map_type)) {
// enmuValue = getInt(R.styleable.MapMultiView_map_type, 0)
// }
// }
// println("------------MSDKInitializer. = ${MSDKInitializer.getMapType()}")
binding
=
MultiViewBinding
.
inflate
(
LayoutInflater
.
from
(
context
))
addView
(
binding
.
root
)
loadMapFrament
()
}
fun
loadMapFrament
()
{
if
(
context
is
FragmentActivity
)
{
var
act
=
context
as
FragmentActivity
var
ft
=
act
.
supportFragmentManager
.
beginTransaction
()
val
map_type
=
MSDKInitializer
.
getMapType
()
if
(
map_type
==
MAP_TYPE
.
MINE
)
{
ft
.
replace
(
R
.
id
.
frame_layout
,
foreMapFragment
)
}
else
if
(
map_type
==
MAP_TYPE
.
AMAP
)
{
ft
.
replace
(
R
.
id
.
frame_layout
,
aMapFragment
)
}
ft
.
commit
()
}
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/ui/SearchActivity.kt
0 → 100644
View file @
b785e7cb
package
com.sd.maplibrary.ui
import
android.os.Bundle
import
android.view.View
import
androidx.activity.viewModels
import
com.chad.library.adapter4.BaseQuickAdapter
import
com.sd.maplibrary.MAP_TYPE
import
com.sd.maplibrary.MSDKInitializer
import
com.sd.maplibrary.adapter.PoiAdapter
import
com.sd.maplibrary.base.BaseActivity
import
com.sd.maplibrary.bean.PoiSearchBean
import
com.sd.maplibrary.databinding.ActivitySearchBinding
import
com.sd.maplibrary.utils.MyContants
import
com.sd.maplibrary.utils.ToastHelper
import
com.sd.maplibrary.viewmodels.FourMapOpVm
import
com.sd.maplibrary.viewmodels.SearchForeMapVm
class
SearchActivity
:
BaseActivity
()
{
private
lateinit
var
binding
:
ActivitySearchBinding
//四维搜索
private
val
searchForeMapVm
:
SearchForeMapVm
by
viewModels
()
private
var
poiAdapter
=
PoiAdapter
()
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
binding
=
ActivitySearchBinding
.
inflate
(
layoutInflater
)
setContentView
(
binding
.
root
)
initView
()
setLis
()
// var intee=Intent().apply {
// putExtra("123","23423423")
// }
// setResult(Activity.RESULT_OK,intee)
// finish()
}
private
fun
initView
()
{
binding
.
poiList
.
adapter
=
poiAdapter
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
}
MAP_TYPE
.
AMAP
->
{
}
}
}
private
fun
getPoiList
(
str
:
String
)
{
if
(
str
.
isEmpty
())
{
ToastHelper
.
showShort
(
this
,
"请输入关键字"
)
return
}
showLoading
(
"搜索中"
)
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
searchForeMapVm
.
getPoiList
(
str
,
MyContants
.
CUR_LAT
,
MyContants
.
CUR_LNG
).
observe
(
this
)
{
poiList
->
dismisLoading
()
poiAdapter
.
submitList
(
poiList
)
}
}
MAP_TYPE
.
AMAP
->
{
}
}
}
private
fun
setLis
()
{
with
(
binding
.
rInputLayout
)
{
tvPoi
.
setOnClickListener
{
getPoiList
(
etEndPlace
.
text
.
toString
())
}
btnRouteS
.
setOnClickListener
{
}
btnSwap
.
setOnClickListener
{
}
}
poiAdapter
.
setOnItemClickListener
{
adapter
,
view
,
position
->
var
bean
:
PoiSearchBean
?
=
adapter
.
getItem
(
position
)
binding
.
rInputLayout
.
etEndPlace
.
setText
(
bean
?.
title
)
}
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/ui/dialog/LoadDialogFragment.kt
0 → 100644
View file @
b785e7cb
package
com.sd.maplibrary.ui.dialog
import
android.os.Bundle
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
androidx.fragment.app.DialogFragment
import
com.sd.maplibrary.databinding.FragmentLoadDialogBinding
private
const
val
ARG_PARAM1
=
"msg"
private
const
val
ARG_PARAM2
=
"setCancelable"
/**
* 等待对话框
*/
class
LoadDialogFragment
:
DialogFragment
()
{
private
var
cancelable
=
true
private
var
msg
=
""
private
lateinit
var
binding
:
FragmentLoadDialogBinding
fun
setIsCanablell
(
canable
:
Boolean
)
{
this
.
cancelable
=
canable
}
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
arguments
?.
let
{
this
.
msg
=
it
.
getString
(
ARG_PARAM1
,
"正在加载"
)
this
.
cancelable
=
it
.
getBoolean
(
ARG_PARAM2
,
true
)
}
}
override
fun
onStart
()
{
super
.
onStart
()
// setWidth(0.5f)
}
// override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
// return AlertDialog.Builder(requireContext())
// .setMessage("getString(R.string.order_confirmation)")
// .setPositiveButton("getString(R.string.ok)") { _,_ -> }
// .create()
//// return super.onCreateDialog(savedInstanceState)
// }
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?
):
View
?
{
// Inflate the layout for this fragment
binding
=
FragmentLoadDialogBinding
.
inflate
(
inflater
,
container
,
false
)
// binding=FragmentLoadDialogBinding.inflate(inflater)
return
binding
.
root
// return inflater.inflate(R.layout.fragment_load_dialog, container, false)
}
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
binding
.
tv
.
setText
(
msg
)
}
companion
object
{
@JvmStatic
fun
newInstance
(
msg
:
String
=
"正在加载"
,
cancelable
:
Boolean
=
true
)
=
LoadDialogFragment
().
apply
{
arguments
=
Bundle
().
apply
{
putString
(
ARG_PARAM1
,
msg
)
putBoolean
(
ARG_PARAM2
,
cancelable
)
}
}
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/ui/view/CircleTextView.java
0 → 100644
View file @
b785e7cb
package
com.sd.maplibrary.ui.view
;
import
android.content.Context
;
import
android.content.res.TypedArray
;
import
android.graphics.Canvas
;
import
android.graphics.Color
;
import
android.graphics.Paint
;
import
android.util.AttributeSet
;
import
android.view.Gravity
;
import
androidx.annotation.ColorInt
;
import
androidx.annotation.NonNull
;
import
androidx.appcompat.widget.AppCompatTextView
;
import
com.sd.maplibrary.R
;
public
class
CircleTextView
extends
AppCompatTextView
{
private
Paint
circlePaint
;
private
Paint
backPaint
;
private
Paint
textPaint
;
private
int
storkColor
=
Color
.
WHITE
;
private
int
circleBackColor
=
Color
.
WHITE
;
private
float
storkWidth
;
public
CircleTextView
(
@NonNull
Context
context
)
{
super
(
context
);
init
(
context
,
null
);
}
public
CircleTextView
(
Context
context
,
AttributeSet
attrs
)
{
super
(
context
,
attrs
);
init
(
context
,
attrs
);
}
private
void
init
(
Context
context
,
AttributeSet
attrs
)
{
setGravity
(
Gravity
.
CENTER
);
setPadding
(
getPaddingLeft
(),
getPaddingTop
(),
getPaddingRight
(),
getPaddingBottom
());
circlePaint
=
new
Paint
(
Paint
.
ANTI_ALIAS_FLAG
);
circlePaint
.
setStyle
(
Paint
.
Style
.
STROKE
);
backPaint
=
new
Paint
(
Paint
.
ANTI_ALIAS_FLAG
);
backPaint
.
setStyle
(
Paint
.
Style
.
FILL
);
textPaint
=
new
Paint
(
Paint
.
ANTI_ALIAS_FLAG
);
storkWidth
=
0
;
if
(
attrs
!=
null
)
{
TypedArray
typedArray
=
context
.
obtainStyledAttributes
(
attrs
,
R
.
styleable
.
CircleTextView
);
storkColor
=
typedArray
.
getColor
(
R
.
styleable
.
CircleTextView_storkColor
,
storkColor
);
circleBackColor
=
typedArray
.
getColor
(
R
.
styleable
.
CircleTextView_backColor
,
circleBackColor
);
storkWidth
=
typedArray
.
getDimension
(
R
.
styleable
.
CircleTextView_storkWidth
,
storkWidth
);
typedArray
.
recycle
();
}
if
(
storkWidth
!=
0
)
{
circlePaint
.
setStrokeWidth
(
storkWidth
);
circlePaint
.
setColor
(
storkColor
);
}
backPaint
.
setColor
(
circleBackColor
);
textPaint
.
setColor
(
getCurrentTextColor
());
textPaint
.
setTextSize
(
getTextSize
());
}
@Override
protected
void
onDraw
(
Canvas
canvas
)
{
super
.
onDraw
(
canvas
);
int
height
=
getHeight
();
int
width
=
getWidth
();
int
radius
;
int
storkRadius
;
int
textWidth
=
(
int
)
textPaint
.
measureText
(
getText
().
toString
());
if
(
width
>
height
)
{
if
(
height
>
textWidth
)
{
radius
=
height
;
}
else
{
setHeight
(
textWidth
+
getPaddingTop
()
+
getPaddingBottom
());
radius
=
textWidth
;
}
}
else
{
if
(
width
>
textWidth
)
{
radius
=
width
;
}
else
{
setWidth
(
textWidth
+
getPaddingRight
()
+
getPaddingLeft
());
radius
=
textWidth
;
}
}
storkRadius
=
(
int
)
(
radius
/
2
-
storkWidth
);
radius
=
storkRadius
-
1
;
if
(
storkWidth
!=
0
)
canvas
.
drawCircle
(
getWidth
()
/
2
,
getHeight
()
/
2
,
storkRadius
,
circlePaint
);
canvas
.
drawCircle
(
getWidth
()
/
2
,
getHeight
()
/
2
,
radius
,
backPaint
);
Paint
.
FontMetrics
fontMetrics
=
textPaint
.
getFontMetrics
();
canvas
.
drawText
(
getText
().
toString
(),
getWidth
()
/
2
-
textPaint
.
measureText
(
getText
().
toString
())
/
2
,
getHeight
()
/
2
-
fontMetrics
.
descent
+
(
fontMetrics
.
bottom
-
fontMetrics
.
top
)
/
2
,
textPaint
);
}
public
void
setMyStorkColor
(
@ColorInt
int
color
)
{
this
.
storkColor
=
color
;
circlePaint
.
setColor
(
storkColor
);
// invalidate();
}
public
void
setMyStorkWidth
(
int
storkWidth
)
{
this
.
storkWidth
=
storkWidth
;
invalidate
();
}
public
void
setBackColor
(
@ColorInt
int
color
)
{
this
.
circleBackColor
=
color
;
backPaint
.
setColor
(
circleBackColor
);
invalidate
();
}
public
void
setMyTextColor
(
@ColorInt
int
color
)
{
textPaint
.
setColor
(
color
);
invalidate
();
}
}
Prev
1
2
3
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment