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
a4c149a6
Commit
a4c149a6
authored
Jul 11, 2025
by
p x
Browse files
集成初始化,显示地图,显示定位蓝点
parent
b785e7cb
Changes
58
Show whitespace changes
Inline
Side-by-side
maplibrary/src/main/java/com/sd/maplibrary/fragments/ForeMapFragment.kt
View file @
a4c149a6
package
com.sd.maplibrary.fragments
package
com.sd.maplibrary.fragments
import
android.app.Activity
import
android.app.Activity
import
android.content.Intent
import
android.os.Bundle
import
android.os.Bundle
import
android.util.Log
import
android.util.Log
import
android.view.LayoutInflater
import
android.view.LayoutInflater
import
android.view.View
import
android.view.View
import
android.view.ViewGroup
import
android.view.ViewGroup
import
androidx.activity.result.contract.ActivityResultContracts
import
androidx.activity.result.contract.ActivityResultContracts
import
androidx.activity.viewModels
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.activityViewModels
import
com.minedata.minenavi.map.MineMap
import
com.sd.maplibrary.MAP_TYPE
import
com.sd.maplibrary.core.MapReadyView
import
com.sd.maplibrary.MSDKInitializer
import
com.sd.maplibrary.base.BaseFragment
import
com.sd.maplibrary.databinding.FragmentForeMapBinding
import
com.sd.maplibrary.databinding.FragmentForeMapBinding
import
com.sd.maplibrary.ui.SearchActivity
import
com.sd.maplibrary.ui.MapMultiView.OnMapReadyLis
import
com.sd.maplibrary.viewmodels.FourMapOpVm
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
//private const val ARG_PARAM1 = "param1"
//private const val ARG_PARAM1 = "param1"
...
@@ -24,7 +20,7 @@ import com.sd.maplibrary.viewmodels.FourMapOpVm
...
@@ -24,7 +20,7 @@ import com.sd.maplibrary.viewmodels.FourMapOpVm
/**
/**
*四维地图
*四维地图
*/
*/
class
ForeMapFragment
:
Base
Fragment
()
{
class
ForeMapFragment
:
Fragment
()
{
// private var param1: String? = null
// private var param1: String? = null
// private var param2: String? = null
// private var param2: String? = null
...
@@ -43,13 +39,11 @@ class ForeMapFragment : BaseFragment() {
...
@@ -43,13 +39,11 @@ class ForeMapFragment : BaseFragment() {
binding
=
FragmentForeMapBinding
.
inflate
(
inflater
,
container
,
false
)
binding
=
FragmentForeMapBinding
.
inflate
(
inflater
,
container
,
false
)
// Inflate the layout for this fragment
// Inflate the layout for this fragment
return
binding
.
root
return
binding
.
root
// return inflater.inflate(R.layout.fragment_fore_map, container, false)
}
}
private
lateinit
var
binding
:
FragmentForeMapBinding
private
lateinit
var
binding
:
FragmentForeMapBinding
//四维地图操作
private
val
fourMapOpVm
:
FourMapOpVm
by
activityViewModels
()
//跳转到搜索界面
//跳转到搜索界面
private
var
searchAct
=
private
var
searchAct
=
...
@@ -61,31 +55,36 @@ class ForeMapFragment : BaseFragment() {
...
@@ -61,31 +55,36 @@ class ForeMapFragment : BaseFragment() {
}
}
})
})
private
var
mMineMap
:
MineMap
?
=
null
private
var
onMapReadyLis
:
OnMapReadyLis
?
=
null
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
super
.
onViewCreated
(
view
,
savedInstanceState
)
initView
()
initView
()
setLis
()
setLis
()
fourMapOpVm
.
starLoc
()
}
}
private
fun
initView
(){
private
fun
initView
()
{
when
(
MSDKInitializer
.
getMapType
()){
MAP_TYPE
.
MINE-
>{
fourMapOpVm
.
init
(
binding
.
mapView
)
// fourMapOpVm.mOnMapViewListener=this@ForeMapFragment
}
MAP_TYPE
.
AMAP-
>{
}
}
private
fun
setLis
()
{
binding
.
mapView
.
addMapRenderCallback
{
mineMap
->
this
.
mMineMap
=
mineMap
MapReadyView
.
instance
.
mMineMap
=
mineMap
onMapReadyLis
?.
onMapReady
(
MapReadyView
.
instance
)
}
}
}
}
private
fun
setLis
()
{
/****地图加载监听回调*/
binding
.
sLayout
.
searchLl
.
setOnClickListener
{
fun
addMapRenderCallback
(
onMapReadyLis
:
OnMapReadyLis
)
{
val
intent
=
Intent
(
requireContext
(),
SearchActivity
::
class
.
java
)
this
.
onMapReadyLis
=
onMapReadyLis
searchAct
.
launch
(
intent
)
}
}
fun
getAnyMap
():
MineMap
?
{
return
mMineMap
}
}
override
fun
onPause
()
{
override
fun
onPause
()
{
...
@@ -100,8 +99,8 @@ class ForeMapFragment : BaseFragment() {
...
@@ -100,8 +99,8 @@ class ForeMapFragment : BaseFragment() {
override
fun
onDestroy
()
{
override
fun
onDestroy
()
{
super
.
onDestroy
()
super
.
onDestroy
()
fourMapOpVm
.
stopLoc
()
binding
.
mapView
.
onDestroy
()
binding
.
mapView
.
onDestroy
()
binding
.
mapView
.
map
}
}
companion
object
{
companion
object
{
...
...
maplibrary/src/main/java/com/sd/maplibrary/intfaces/MyMineNaviListener.kt
0 → 100644
View file @
a4c149a6
package
com.sd.maplibrary.intfaces
import
com.minedata.minenavi.mapdal.PoiFavorite
import
com.minedata.minenavi.navi.ArrowInfo
import
com.minedata.minenavi.navi.BusRoute
import
com.minedata.minenavi.navi.GuidanceText
import
com.minedata.minenavi.navi.MineNaviListener
import
com.minedata.minenavi.navi.NaviProgressData
import
com.minedata.minenavi.navi.NaviSessionData
import
com.minedata.minenavi.navi.RouteBase
import
com.minedata.minenavi.navi.RouteBriefQuerier
import
com.minedata.minenavi.navi.RouteCollection
import
com.minedata.minenavi.navi.RouterErrorInfo
import
com.minedata.minenavi.navi.SmoothNaviData
import
com.minedata.minenavi.navi.TmcSections
/***
* 导航监听
*/
abstract
class
MyMineNaviListener
:
MineNaviListener
{
override
fun
onCalculateRouteSuccess
(
data
:
RouteCollection
)
{
// 路线规划成功
}
override
fun
onCalculateBusSuccess
(
p0
:
List
<
BusRoute
?
>?)
{
}
override
fun
onCalculateRouteFailed
(
data
:
RouterErrorInfo
)
{
// 路线规划失败
}
override
fun
onCalculateVrpSuccess
(
p0
:
List
<
PoiFavorite
?
>?)
{
}
//到达目的地后回调函数
override
fun
onArriveDestination
()
{
}
override
fun
onWayPointArrived
(
p0
:
Int
)
{
}
//当前有新的转弯箭头需要显示回调函数
override
fun
onNewArrow
(
arrowInfo
:
ArrowInfo
)
{
}
override
fun
onDeleteArrow
()
{
}
override
fun
onNewRouteTaken
()
{
}
override
fun
onRouteRemoved
()
{
}
override
fun
onNeedsReroute
()
{
}
override
fun
onRerouteCancelled
()
{
}
override
fun
onRerouteComplete
(
p0
:
RouteBase
?)
{
}
override
fun
onRerouteFailed
(
p0
:
RouterErrorInfo
)
{
}
override
fun
onRerouteStarted
()
{
}
override
fun
onRouteCancelled
()
{
}
override
fun
onRouteStarted
()
{
}
override
fun
onRouting
()
{
}
override
fun
onNaviBegin
()
{
}
override
fun
onSimNaviBegin
()
{
}
override
fun
onSimNaviEnd
()
{
}
override
fun
onNaviEnded
()
{
}
/***
* 车位置发生改变
* */
override
fun
onTracking
(
data
:
NaviSessionData
)
{
}
/**
* 导航或者模拟导航时平滑跟踪
* **/
override
fun
onSmoothTracking
(
data
:
SmoothNaviData
)
{
}
/**
* 解析 naviProgressData 导航更新信息
* **/
override
fun
onDataUpdated
(
naviProgressData
:
NaviProgressData
)
{
}
/**
* 引导文字改变
* **/
override
fun
onTextChanged
(
guidanceText
:
GuidanceText
)
{
}
/**
* 导航路口剩余距离
* */
override
fun
onDistanceChanged
(
p0
:
Int
)
{
}
/**
* 解析 tmcSections 路况(TMC)信息条中的段信息
* **/
override
fun
onTiBarUpdated
(
tmcSections
:
TmcSections
)
{
}
override
fun
onRouteTmcUpdated
(
p0
:
RouteBase
?)
{
}
override
fun
onRouteTeUpdated
(
p0
:
RouteBase
?)
{
}
override
fun
onRouteBriefRequestSucceeded
(
p0
:
RouteBriefQuerier
.
RouteBrief
?)
{
}
override
fun
onRouteBriefRequestFailed
(
p0
:
Int
,
p1
:
String
?)
{
}
override
fun
onRouteBriefRequestCancelled
()
{
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/intfaces/OnNaviPresenterListener.kt
0 → 100644
View file @
a4c149a6
package
com.sd.maplibrary.intfaces
import
com.minedata.minenavi.navi.GuidanceText
import
com.minedata.minenavi.navi.NaviProgressData
import
com.minedata.minenavi.navi.RouteBase
import
com.minedata.minenavi.navi.RouteDetailItem
import
com.minedata.minenavi.navi.TmcSections
interface
OnNaviPresenterListener
{
fun
onDataUpdated
(
naviProgressData
:
NaviProgressData
)
fun
onTiBarUpdated
(
tmcSections
:
TmcSections
)
fun
onTextChanged
(
guidanceText
:
GuidanceText
)
fun
onDistanceChanged
(
distance
:
Int
)
fun
onRouteDetailBrowserLoaded
(
routeDetailItems
:
MutableList
<
RouteDetailItem
>?)
fun
onCalculateRouteSuccess
(
routeBase
:
RouteBase
?)
fun
onCalculateRouteFailed
(
msg
:
String
?)
fun
onArriveDestination
()
fun
onRerouteFailed
(
msg
:
String
?)
fun
onNaviBegin
()
fun
onNaviEnded
()
fun
onSimNaviBegin
()
fun
onSimNaviEnd
()
/**
* 走过了多少路
* @param ratio
*/
fun
onTracking
(
ratio
:
Float
)
fun
onGpsConnected
()
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/ui/
view/
ForeMapView.kt
→
maplibrary/src/main/java/com/sd/maplibrary/ui/ForeMapView.kt
View file @
a4c149a6
package
com.sd.maplibrary.ui
.view
package
com.sd.maplibrary.ui
import
android.content.Context
import
android.content.Context
import
android.graphics.Rect
import
android.graphics.Rect
...
@@ -26,7 +26,7 @@ class ForeMapView : MapView {
...
@@ -26,7 +26,7 @@ class ForeMapView : MapView {
fun
onScrollFinished
()
fun
onScrollFinished
()
}
}
private
val
mListeners
=
arrayListOf
<
ForeMapView
.
Listener
>()
private
val
mListeners
=
arrayListOf
<
Listener
>()
fun
addListener
(
listener
:
Listener
)
{
fun
addListener
(
listener
:
Listener
)
{
mListeners
.
add
(
listener
)
mListeners
.
add
(
listener
)
...
...
maplibrary/src/main/java/com/sd/maplibrary/ui/MapMultiView.kt
View file @
a4c149a6
...
@@ -4,10 +4,14 @@ import android.content.Context
...
@@ -4,10 +4,14 @@ import android.content.Context
import
android.util.AttributeSet
import
android.util.AttributeSet
import
android.view.LayoutInflater
import
android.view.LayoutInflater
import
android.widget.LinearLayout
import
android.widget.LinearLayout
import
androidx.core.content.withStyledAttributes
import
androidx.fragment.app.FragmentActivity
import
androidx.fragment.app.FragmentActivity
import
com.amap.api.maps.AMap
import
com.minedata.minenavi.map.MineMap
import
com.sd.maplibrary.MAP_TYPE
import
com.sd.maplibrary.MAP_TYPE
import
com.sd.maplibrary.MSDKInitializer
import
com.sd.maplibrary.MSDKInitializer
import
com.sd.maplibrary.R
import
com.sd.maplibrary.R
import
com.sd.maplibrary.core.MapReadyView
import
com.sd.maplibrary.databinding.MultiViewBinding
import
com.sd.maplibrary.databinding.MultiViewBinding
import
com.sd.maplibrary.fragments.AMapFragment
import
com.sd.maplibrary.fragments.AMapFragment
import
com.sd.maplibrary.fragments.ForeMapFragment
import
com.sd.maplibrary.fragments.ForeMapFragment
...
@@ -31,23 +35,27 @@ class MapMultiView : LinearLayout {
...
@@ -31,23 +35,27 @@ class MapMultiView : LinearLayout {
init
(
attrs
,
defStyleAttr
)
init
(
attrs
,
defStyleAttr
)
}
}
interface
OnMapReadyLis
{
fun
onMapReady
(
mapReadyView
:
MapReadyView
)
}
private
lateinit
var
binding
:
MultiViewBinding
private
lateinit
var
binding
:
MultiViewBinding
//四维地图
//四维地图
private
val
foreMapFragment
by
lazy
{
ForeMapFragment
.
newInstance
()
}
private
val
foreMapFragment
by
lazy
{
ForeMapFragment
.
newInstance
()
}
//高德地图
//高德地图
private
val
aMapFragment
by
lazy
{
AMapFragment
.
newInstance
()
}
private
val
aMapFragment
by
lazy
{
AMapFragment
.
newInstance
()
}
private
var
enmuValue
=
0
private
var
enmuValue
=
0
private
fun
init
(
attrs
:
AttributeSet
?,
defStyle
:
Int
)
{
private
fun
init
(
attrs
:
AttributeSet
?,
defStyle
:
Int
)
{
//
context.withStyledAttributes(attrs, R.styleable.MapMultiView, defStyle, 0) {
context
.
withStyledAttributes
(
attrs
,
R
.
styleable
.
MapMultiView
,
defStyle
,
0
)
{
//
if (hasValue(R.styleable.MapMultiView_map_type)) {
if
(
hasValue
(
R
.
styleable
.
MapMultiView_map_type
))
{
//
enmuValue = getInt(R.styleable.MapMultiView_map_type, 0)
enmuValue
=
getInt
(
R
.
styleable
.
MapMultiView_map_type
,
0
)
//
}
}
//
}
}
//
println("------------MSDKInitializer. = ${MSDKInitializer.getMapType()}")
println
(
"------------MSDKInitializer. = ${MSDKInitializer.getMapType()}"
)
binding
=
MultiViewBinding
.
inflate
(
LayoutInflater
.
from
(
context
))
binding
=
MultiViewBinding
.
inflate
(
LayoutInflater
.
from
(
context
))
addView
(
binding
.
root
)
addView
(
binding
.
root
)
loadMapFrament
()
loadMapFrament
()
...
@@ -58,15 +66,35 @@ class MapMultiView : LinearLayout {
...
@@ -58,15 +66,35 @@ class MapMultiView : LinearLayout {
if
(
context
is
FragmentActivity
)
{
if
(
context
is
FragmentActivity
)
{
var
act
=
context
as
FragmentActivity
var
act
=
context
as
FragmentActivity
var
ft
=
act
.
supportFragmentManager
.
beginTransaction
()
var
ft
=
act
.
supportFragmentManager
.
beginTransaction
()
val
map_type
=
MSDKInitializer
.
getMapType
()
if
(
enmuValue
==
MAP_TYPE
.
MINE
.
ordinal
)
{
if
(
map_type
==
MAP_TYPE
.
MINE
)
{
ft
.
replace
(
R
.
id
.
frame_layout
,
foreMapFragment
)
ft
.
replace
(
R
.
id
.
frame_layout
,
foreMapFragment
)
}
else
if
(
enmuValue
==
MAP_TYPE
.
AMAP
.
ordinal
)
{
}
else
if
(
map_type
==
MAP_TYPE
.
AMAP
)
{
ft
.
replace
(
R
.
id
.
frame_layout
,
aMapFragment
)
ft
.
replace
(
R
.
id
.
frame_layout
,
aMapFragment
)
}
}
ft
.
commit
()
ft
.
commit
()
}
}
}
}
/****地图加载监听回调*/
fun
addMapRenderCallback
(
onMapReadyLis
:
OnMapReadyLis
)
{
if
(
enmuValue
==
0
)
{
foreMapFragment
.
addMapRenderCallback
(
onMapReadyLis
)
}
else
if
(
enmuValue
==
1
)
{
aMapFragment
.
addMapRenderCallback
(
onMapReadyLis
)
}
}
/****获取 mMineMap 或者 aMap ***/
fun
getAnyMap
():
Any
?
{
if
(
enmuValue
==
0
)
{
return
foreMapFragment
.
getAnyMap
()
as
MineMap
}
else
if
(
enmuValue
==
1
)
{
return
aMapFragment
.
getAnyMap
()
as
AMap
}
return
null
}
}
}
maplibrary/src/main/java/com/sd/maplibrary/ui/SearchActivity.kt
deleted
100644 → 0
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
deleted
100644 → 0
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
deleted
100644 → 0
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
();
}
}
maplibrary/src/main/java/com/sd/maplibrary/ui/view/CleanableEditText.java
deleted
100644 → 0
View file @
b785e7cb
package
com.sd.maplibrary.ui.view
;
import
android.content.Context
;
import
android.graphics.drawable.Drawable
;
import
android.text.Editable
;
import
android.text.TextWatcher
;
import
android.util.AttributeSet
;
import
android.view.MotionEvent
;
import
android.view.View
;
import
androidx.appcompat.widget.AppCompatEditText
;
/**
* @author Administrator
* 在焦点变化时和输入内容发生变化时均要判断是否显示右边clean图标
*/
public
class
CleanableEditText
extends
AppCompatEditText
{
private
Drawable
mRightDrawable
;
private
boolean
isHasFocus
;
public
CleanableEditText
(
Context
context
)
{
super
(
context
);
init
();
}
public
CleanableEditText
(
Context
context
,
AttributeSet
attrs
)
{
super
(
context
,
attrs
);
init
();
}
public
CleanableEditText
(
Context
context
,
AttributeSet
attrs
,
int
defStyle
)
{
super
(
context
,
attrs
,
defStyle
);
init
();
}
private
void
init
()
{
// getCompoundDrawables:
// Returns drawables for the left, top, right, and bottom borders.
Drawable
[]
drawables
=
this
.
getCompoundDrawables
();
// 取得right位置的Drawable
// 即我们在布局文件中设置的android:drawableRight
mRightDrawable
=
drawables
[
2
];
// mRightDrawable.setBounds(0,0,25,25);
// 设置焦点变化的监听
this
.
setOnFocusChangeListener
(
new
FocusChangeListenerImpl
());
// 设置EditText文字变化的监听
this
.
addTextChangedListener
(
new
TextWatcherImpl
());
// 初始化时让右边clean图标不可见
setClearDrawableVisible
(
false
);
}
/**
* 当手指抬起的位置在clean的图标的区域 我们将此视为进行清除操作 getWidth():得到控件的宽度
* event.getX():抬起时的坐标(改坐标是相对于控件本身而言的)
* getTotalPaddingRight():clean的图标左边缘至控件右边缘的距离
* getPaddingRight():clean的图标右边缘至控件右边缘的距离 于是: getWidth() -
* getTotalPaddingRight()表示: 控件左边到clean的图标左边缘的区域 getWidth() -
* getPaddingRight()表示: 控件左边到clean的图标右边缘的区域 所以这两者之间的区域刚好是clean的图标的区域
*/
@Override
public
boolean
onTouchEvent
(
MotionEvent
event
)
{
switch
(
event
.
getAction
())
{
case
MotionEvent
.
ACTION_UP
:
boolean
isClean
=
(
event
.
getX
()
>
(
getWidth
()
-
getTotalPaddingRight
()))
&&
(
event
.
getX
()
<
(
getWidth
()
-
getPaddingRight
()));
if
(
isClean
)
{
setText
(
""
);
}
break
;
default
:
break
;
}
return
super
.
onTouchEvent
(
event
);
}
private
class
FocusChangeListenerImpl
implements
OnFocusChangeListener
{
@Override
public
void
onFocusChange
(
View
v
,
boolean
hasFocus
)
{
isHasFocus
=
hasFocus
;
if
(
isHasFocus
)
{
boolean
isVisible
=
getText
().
toString
().
length
()
>=
1
;
setClearDrawableVisible
(
isVisible
);
}
else
{
setClearDrawableVisible
(
false
);
}
}
}
// 当输入结束后判断是否显示右边clean的图标
private
class
TextWatcherImpl
implements
TextWatcher
{
@Override
public
void
afterTextChanged
(
Editable
s
)
{
boolean
isVisible
=
getText
().
toString
().
length
()
>=
1
;
setClearDrawableVisible
(
isVisible
);
}
@Override
public
void
beforeTextChanged
(
CharSequence
s
,
int
start
,
int
count
,
int
after
)
{
}
@Override
public
void
onTextChanged
(
CharSequence
s
,
int
start
,
int
before
,
int
count
)
{
}
}
// 隐藏或者显示右边clean的图标
protected
void
setClearDrawableVisible
(
boolean
isVisible
)
{
Drawable
rightDrawable
;
if
(
isVisible
)
{
rightDrawable
=
mRightDrawable
;
}
else
{
rightDrawable
=
null
;
}
// 使用代码设置该控件left, top, right, and bottom处的图标
setCompoundDrawables
(
getCompoundDrawables
()[
0
],
getCompoundDrawables
()[
1
],
rightDrawable
,
getCompoundDrawables
()[
3
]);
}
}
maplibrary/src/main/java/com/sd/maplibrary/viewmodels/Ee.kt
deleted
100644 → 0
View file @
b785e7cb
package
com.sd.maplibrary.viewmodels
import
androidx.lifecycle.ViewModel
import
androidx.lifecycle.viewModelScope
class
Ee
:
ViewModel
()
{
fun
sdsd
(){
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/viewmodels/FourMapOpVm.kt
deleted
100644 → 0
View file @
b785e7cb
package
com.sd.maplibrary.viewmodels
import
android.annotation.SuppressLint
import
android.app.Application
import
android.os.Bundle
import
androidx.lifecycle.AndroidViewModel
import
androidx.lifecycle.LiveData
import
androidx.lifecycle.MutableLiveData
import
com.minedata.minenavi.location.MineLocation
import
com.minedata.minenavi.location.MineLocationListener
import
com.minedata.minenavi.location.MineLocationManager
import
com.minedata.minenavi.location.MineLocationOptions
import
com.minedata.minenavi.map.MineMap
import
com.minedata.minenavi.map.MyLocationStyle
import
com.minedata.minenavi.mapdal.CoordType
import
com.sd.maplibrary.bean.MyLocBean
import
com.sd.maplibrary.ui.view.ForeMapView
import
com.sd.maplibrary.utils.MyContants
/***四维地图操作类***/
class
FourMapOpVm
(
private
var
application
:
Application
)
:
AndroidViewModel
(
application
)
{
@SuppressLint
(
"StaticFieldLeak"
)
private
lateinit
var
mMapView
:
ForeMapView
private
lateinit
var
mMineMap
:
MineMap
private
var
mMyLocationStyle
:
MyLocationStyle
?
=
null
//我的定位信息
var
myLocBean
=
MutableLiveData
<
MyLocBean
>()
fun
init
(
foreMapView
:
ForeMapView
)
{
mMapView
=
foreMapView
MineLocationManager
.
getInstance
()
.
init
(
application
,
MineLocationManager
.
LocationSource
.
all
)
MineLocationManager
.
getInstance
().
addListener
(
mineLocationListener
)
mMapView
.
addMapRenderCallback
{
mineMap
:
MineMap
->
mMineMap
=
mineMap
mMineMap
.
minZoomLevel
=
0.0f
mMineMap
.
maxZoomLevel
=
17.0f
addMyLocationStyle
()
mOnMapViewListener
?.
onMapReady
()
}
}
private
fun
addMyLocationStyle
()
{
// 定位蓝点,默认使用内置定位
mMyLocationStyle
=
MyLocationStyle
()
// 使用外部传入位置信息
mMyLocationStyle
?.
myLocationType
(
MyLocationStyle
.
LOCATION_TYPE_LOCATE
)
// mMyLocationStyle.setPosition(point);
// mMyLocationStyle.orientAngle(30.0f);
// mMyLocationStyle.interval(2000);
mMyLocationStyle
?.
showMyLocation
(
true
)
mMyLocationStyle
?.
setClickable
(
true
)
mMineMap
.
setMyLocationStyle
(
mMyLocationStyle
)
}
/***
* 开启定位
*/
fun
starLoc
():
LiveData
<
MyLocBean
>
{
// 设置定位参数,并开始定位。
val
options
=
MineLocationOptions
()
options
.
setCoordType
(
CoordType
.
GCJ02
)
options
.
setGpsInterval
(
1000
);
//GPS定位更新时间,最小1000
options
.
setNetWorkInterval
(
3000
);
//WiFi定位更新时间,最小3000
options
.
setStationInterval
(
5000
);
//基站定位更新时间,最小500
MineLocationManager
.
getInstance
().
start
(
options
)
return
myLocBean
}
fun
stopLoc
()
{
MineLocationManager
.
getInstance
().
removeAllListener
()
MineLocationManager
.
getInstance
().
stop
()
MineLocationManager
.
getInstance
().
cleanup
()
}
////////////////////////////////////
////////////////////////////////////
////////////////////////////////////
var
mOnMapViewListener
:
OnMapViewListener
?
=
null
interface
OnMapViewListener
{
fun
onMapReady
()
fun
onswitchLocation
(
imageLevel
:
Int
)
}
private
var
mineLocationListener
=
object
:
MineLocationListener
{
override
fun
onSimLocationChanged
(
location
:
MineLocation
?)
{
var
a
=
0
}
override
fun
onLocationChanged
(
location
:
MineLocation
?)
{
println
(
"-------定位改变 = ${location?.latitude} curLng=${location?.longitude} speed=${location?.speed}"
)
// var df = DecimalFormat("#.00000000")
MyContants
.
CUR_LAT
=
location
?.
latitude
?:
0.0
MyContants
.
CUR_LNG
=
location
?.
longitude
?:
0.0
MyContants
.
CUR_SPEED
=
location
?.
speed
?:
0f
// MyPres.curLat = MyContants.CUR_LAT
// MyPres.curLng = MyContants.CUR_LNG
if
(
MyContants
.
CUR_SPEED
>
0f
)
{
// MyPres.curSpeed = MyContants.CUR_SPEED
}
var
myLoc
=
MyLocBean
().
apply
{
curLat
=
MyContants
.
CUR_LAT
curLng
=
MyContants
.
CUR_LNG
// curLat = MyContants.MOCK_LAT
// curLng = MyContants.MOCK_LNG
speed
=
MyContants
.
CUR_SPEED
}
// myLocBean.postValue(bean)
myLocBean
.
value
=
myLoc
}
override
fun
onStatusChanged
(
provider
:
String
?,
status
:
Int
,
extras
:
Bundle
?)
{
var
a
=
0
}
override
fun
onProviderEnabled
(
provider
:
String
?)
{
var
a
=
0
}
override
fun
onProviderDisabled
(
provider
:
String
?)
{
var
b
=
0
}
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/viewmodels/SearchForeMapVm.kt
deleted
100644 → 0
View file @
b785e7cb
package
com.sd.maplibrary.viewmodels
import
android.annotation.SuppressLint
import
android.app.Application
import
android.content.Context
import
androidx.lifecycle.AndroidViewModel
import
androidx.lifecycle.LiveData
import
androidx.lifecycle.MutableLiveData
import
androidx.lifecycle.ViewModel
import
com.minedata.minenavi.mapdal.PoiItem
import
com.minedata.minenavi.poiquery.LatLonPoint
import
com.minedata.minenavi.poiquery.PoiResult
import
com.minedata.minenavi.poiquery.PoiSearch
import
com.minedata.minenavi.poiquery.SearchErrorCode
import
com.minedata.minenavi.poiquery.SortType
import
com.sd.maplibrary.bean.PoiSearchBean
import
com.sd.maplibrary.utils.MyContants
/***四维地图搜索相关***/
class
SearchForeMapVm
(
private
var
application
:
Application
)
:
AndroidViewModel
(
application
)
{
@SuppressLint
(
"StaticFieldLeak"
)
private
var
ctx
:
Context
?
=
null
private
var
poiSearch
:
PoiSearch
?
=
null
//搜索结果
var
poiSearchBean
=
MutableLiveData
<
List
<
PoiSearchBean
>>()
init
{
ctx
=
application
.
applicationContext
poiSearch
=
PoiSearch
(
ctx
)
poiSearch
?.
setOnPoiSearchListener
(
object
:
PoiSearch
.
OnPoiSearchListener
{
override
fun
onPoiItemSearched
(
poiItem
:
PoiItem
?,
errorCode
:
Int
)
{
var
a
=
0
}
override
fun
onPoiSearched
(
poiResult
:
PoiResult
?,
errorCode
:
Int
)
{
if
(
errorCode
==
SearchErrorCode
.
none
)
{
var
temps
=
poiResult
?.
getPois
()
var
poiList
=
temps
!!
.
map
{
pos
->
PoiSearchBean
().
apply
{
lat
=
pos
.
location
.
latitude
lng
=
pos
.
location
.
longitude
// title = "${pos.provinceName}${pos.cityName}${pos.district}${pos.title}"
title
=
pos
.
title
snippet
=
pos
.
snippet
cityName
=
pos
.
cityName
//这里为0 因为不是范围搜素
distance
=
pos
.
distance
adCode
=
pos
.
adCode
}
}
poiSearchBean
.
postValue
(
poiList
)
}
else
{
}
}
})
}
fun
getPoiList
(
str
:
String
,
curLat
:
Double
,
curLng
:
Double
):
LiveData
<
List
<
PoiSearchBean
>>
{
val
query
=
PoiSearch
.
Query
(
str
,
""
)
// 限制严格按照设置城市搜索
// query.setCityLimit(true)
// 设置查询位置点
if
(
curLat
!=
0.0
&&
curLng
!=
0.0
)
{
query
.
setLocation
(
LatLonPoint
(
curLat
,
curLng
))
}
// 设置排序方式为热度排序
query
.
setSortType
(
SortType
.
SORT_TYPE_HIT
)
// 返回父子关系
query
.
requireSubPois
(
false
)
// 设置查询每页的结果数目
query
.
setPageSize
(
10
)
poiSearch
?.
setQuery
(
query
)
// 开始搜索
poiSearch
?.
searchPOIAsyn
()
return
poiSearchBean
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/vms/MainVM.kt
0 → 100644
View file @
a4c149a6
package
com.sd.maplibrary.vms
import
androidx.lifecycle.ViewModel
import
com.sd.maplibrary.core.MSLocationStyle
import
com.sd.maplibrary.core.MapReadyView
class
MainVM
:
ViewModel
()
{
//显示定位蓝点
fun
showMyLocLandian
(
mapReadView
:
MapReadyView
?){
MSLocationStyle
.
setLocationStyle
(
mapReadView
)
}
}
\ No newline at end of file
maplibrary/src/main/res/layout/fragment_a_map.xml
View file @
a4c149a6
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<com.amap.api.maps.MapView
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/mMapView"
android:layout_width=
"match_parent"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
/>
tools:context=
".fragments.AMapFragment"
>
<!-- TODO: Update blank fragment layout -->
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:text=
"@string/hello_blank_fragment"
/>
</FrameLayout>
\ No newline at end of file
maplibrary/src/main/res/layout/fragment_fore_map.xml
View file @
a4c149a6
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<com.minedata.minenavi.map.MapView
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
>
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/mapView"
<data>
</data>
<RelativeLayout
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".fragments.ForeMapFragment"
>
tools:context=
".fragments.ForeMapFragment"
/
>
<!-- smallView="true"-->
<!-- smallView="true"-->
...
@@ -20,17 +13,13 @@
...
@@ -20,17 +13,13 @@
<!-- smallViewLeft="0"-->
<!-- smallViewLeft="0"-->
<!-- smallViewRight="10"-->
<!-- smallViewRight="10"-->
<!-- smallViewTop="0"-->
<!-- smallViewTop="0"-->
<com.sd.maplibrary.ui.view.ForeMapView
android:id=
"@+id/mapView"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
<include
<!-- <include-->
android:id=
"@+id/s_layout"
<!-- android:id="@+id/s_layout"-->
layout=
"@layout/search_layout"
/>
<!-- layout="@layout/search_layout" />-->
<!--</com.minedata.minenavi.map.MapView>-->
</RelativeLayout>
</layout>
maplibrary/src/main/res/layout/fragment_load_dialog.xml
deleted
100644 → 0
View file @
b785e7cb
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:gravity=
"center_horizontal"
android:background=
"@drawable/rect_white_10"
android:paddingVertical=
"@dimen/dp_20"
android:paddingHorizontal=
"@dimen/dp_50"
android:orientation=
"vertical"
tools:context=
".ui.dialog.LoadDialogFragment"
>
<ProgressBar
style=
"?android:attr/progressBarStyle"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
/>
<TextView
android:id=
"@+id/tv"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"10dp"
android:text=
"正在加载"
/>
</LinearLayout>
\ No newline at end of file
maplibrary/src/main/res/layout/multi_view.xml
View file @
a4c149a6
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<data>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
</data>
<RelativeLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<FrameLayout
android:id=
"@+id/frame_layout"
android:id=
"@+id/frame_layout"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
android:layout_height=
"match_parent"
/>
<RelativeLayout
<!-- <RelativeLayout-->
android:layout_width=
"match_parent"
<!-- android:layout_width="match_parent"-->
android:layout_height=
"40dp"
<!-- android:layout_height="40dp"-->
android:background=
"#66E4E4E4"
>
<!-- android:background="#66E4E4E4">-->
<!-- <TextView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_alignParentRight="true"-->
<!-- android:layout_centerVertical="true"-->
<!-- android:paddingVertical="2dp"-->
<!-- android:paddingRight="10dp"-->
<!-- android:text="切换地图"-->
<!-- android:textSize="14sp" />-->
<TextView
<!-- </RelativeLayout>-->
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_alignParentRight=
"true"
android:layout_centerVertical=
"true"
android:paddingVertical=
"2dp"
android:paddingRight=
"10dp"
android:text=
"切换地图"
android:textSize=
"14sp"
/>
</RelativeLayout>
<!--
</RelativeLayout>
-->
</RelativeLayout>
</layout>
maplibrary/src/main/res/layout/search_layout.xml
deleted
100644 → 0
View file @
b785e7cb
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/search_ll"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@drawable/rect_white_10"
android:elevation=
"2dp"
android:orientation=
"horizontal"
android:paddingHorizontal=
"10dp"
android:paddingVertical=
"8dp"
tools:showIn=
"@layout/fragment_fore_map"
>
<!-- android:src="@drawable/ic_arrow_back_24"-->
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:src=
"@drawable/icon_search"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginLeft=
"5dp"
android:hint=
"搜索地点或地址"
android:textColorHint=
"#66000000"
android:textSize=
"12sp"
/>
</LinearLayout>
\ No newline at end of file
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