增加评测link功能

This commit is contained in:
squallzhjch 2023-07-13 17:43:38 +08:00
parent 43b62f9947
commit be2d0389cf
2 changed files with 228 additions and 200 deletions

View File

@ -19,10 +19,13 @@ import androidx.annotation.RequiresApi
import androidx.constraintlayout.widget.Group import androidx.constraintlayout.widget.Group
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import androidx.navigation.findNavController import androidx.navigation.findNavController
import com.blankj.utilcode.util.ToastUtils import com.blankj.utilcode.util.ToastUtils
import com.navinfo.collect.library.data.dao.impl.TraceDataBase import com.navinfo.collect.library.data.dao.impl.TraceDataBase
import com.navinfo.collect.library.data.entity.NoteBean
import com.navinfo.collect.library.data.entity.QsRecordBean
import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.collect.library.data.entity.RenderEntity
import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.collect.library.data.entity.TaskBean
import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.map.NIMapController
@ -44,6 +47,7 @@ import com.navinfo.omqs.util.SpeakMode
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.Realm import io.realm.Realm
import io.realm.RealmSet import io.realm.RealmSet
import io.realm.kotlin.where
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -149,27 +153,62 @@ class MainViewModel @Inject constructor(
} }
} }
} }
viewModelScope.launch(Dispatchers.IO) {
initTaskData() initTaskData()
initQsRecordData()
initNoteData()
}
} }
/** /**
* 初始化选中的任务高亮高亮 * 初始化选中的任务高亮高亮
*/ */
private fun initTaskData() { private suspend fun initTaskData() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
viewModelScope.launch(Dispatchers.IO) { val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1)
val id = sharedPreferences.getInt(Constant.SELECT_TASK_ID, -1) val realm = Realm.getDefaultInstance()
val realm = Realm.getDefaultInstance() val res = realm.where(TaskBean::class.java).equalTo("id", id).findFirst()
val res = realm.where(TaskBean::class.java).equalTo("id", id).findFirst() if (res != null) {
if (res != null) { val taskBean = realm.copyFromRealm(res)
val taskBean = realm.copyFromRealm(res) mapController.lineHandler.omdbTaskLinkLayer.addLineList(taskBean.hadLinkDvoList)
mapController.lineHandler.omdbTaskLinkLayer.addLineList(taskBean.hadLinkDvoList)
}
} }
} }
} }
/**
* 初始化渲染质检数据
*/
private suspend fun initQsRecordData() {
var list = mutableListOf<QsRecordBean>()
val realm = Realm.getDefaultInstance()
realm.executeTransaction {
val objects = realm.where<QsRecordBean>().findAll()
list = realm.copyFromRealm(objects)
}
for (item in list) {
mapController.markerHandle.addOrUpdateQsRecordMark(item)
}
}
/**
* 初始化渲染便签数据
*/
private suspend fun initNoteData() {
var list = mutableListOf<NoteBean>()
val realm = Realm.getDefaultInstance()
realm.executeTransaction {
val objects = realm.where<NoteBean>().findAll()
list = realm.copyFromRealm(objects)
}
for (item in list) {
mapController.markerHandle.addOrUpdateNoteMark(item)
}
}
/**
* 初始化定位信息
*/
private fun initLocation() { private fun initLocation() {
//用于定位点存储到数据库 //用于定位点存储到数据库
viewModelScope.launch(Dispatchers.Default) { viewModelScope.launch(Dispatchers.Default) {

View File

@ -42,8 +42,6 @@ import java.util.*
class MarkHandler(context: AppCompatActivity, mapView: NIMapView) : class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
BaseHandler(context, mapView) { BaseHandler(context, mapView) {
// //默认marker图层
private var mDefaultMarkerLayer: ItemizedLayer
/** /**
* 默认文字颜色 * 默认文字颜色
@ -53,22 +51,94 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
/** /**
* 文字画笔 * 文字画笔
*/ */
private val paint: Paint by lazy {
private lateinit var paint: Paint val p = CanvasAdapter.newPaint()
p.setTypeface(Paint.FontFamily.DEFAULT, Paint.FontStyle.NORMAL)
//画布 p.setTextSize(NUM_13 * CanvasAdapter.getScale())
private lateinit var canvas: org.oscim.backend.canvas.Canvas p.strokeWidth = 2 * CanvasAdapter.getScale()
private lateinit var itemizedLayer: MyItemizedLayer p.color = Color.parseColor(mDefaultTextColor)
p
private lateinit var markerRendererFactory: MarkerRendererFactory }
private val resId = R.mipmap.map_icon_report
private val noteResId = R.drawable.icon_note_marker
private var itemListener: OnQsRecordItemClickListener? = null
/** /**
* 文字大小 * 画布
*/ */
private val NUM_13 = 13 private val canvas: org.oscim.backend.canvas.Canvas by lazy {
CanvasAdapter.newCanvas()
}
/**
* 默认marker图层
*/
private val mDefaultMarkerLayer: ItemizedLayer by lazy {
//新增marker图标样式
val mDefaultBitmap =
AndroidBitmap(BitmapFactory.decodeResource(context.resources, R.mipmap.marker))
val markerSymbol = MarkerSymbol(
mDefaultBitmap,
MarkerSymbol.HotspotPlace.BOTTOM_CENTER
)
val layer = ItemizedLayer(
mapView.vtmMap,
ArrayList(),
markerSymbol,
object : OnItemGestureListener<MarkerInterface> {
override fun onItemSingleTapUp(index: Int, item: MarkerInterface?): Boolean {
return false
}
override fun onItemLongPress(index: Int, item: MarkerInterface?): Boolean {
return false
}
}
)
addLayer(layer, NIMapView.LAYER_GROUPS.OPERATE_MARKER)
layer
}
/**
* 评测数据marker 图层
*/
private val qsRecordItemizedLayer: MyItemizedLayer by lazy {
val layer = MyItemizedLayer(
mMapView.vtmMap,
mutableListOf(),
markerRendererFactory,
object : MyItemizedLayer.OnItemGestureListener {
override fun onItemSingleTapUp(
list: MutableList<Int>,
nearest: Int
): Boolean {
itemListener?.let {
val idList = mutableListOf<String>()
if (list.size == 0) {
} else {
for (i in list) {
val markerInterface: MarkerInterface =
qsRecordItemizedLayer.itemList[i]
if (markerInterface is MarkerItem) {
idList.add(markerInterface.title)
}
}
it.onQsRecordList(idList.distinct().toMutableList())
}
}
return true
}
override fun onItemLongPress(
list: MutableList<Int>?,
nearest: Int
): Boolean {
return true
}
})
addLayer(layer, NIMapView.LAYER_GROUPS.OPERATE_MARKER)
layer
}
/** /**
* 便签线图层 * 便签线图层
@ -79,7 +149,9 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
layer layer
} }
/**
* 便签图标图层
*/
private val noteLayer: MyItemizedLayer by lazy { private val noteLayer: MyItemizedLayer by lazy {
val layer = MyItemizedLayer( val layer = MyItemizedLayer(
@ -94,6 +166,7 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
itemListener?.let { itemListener?.let {
val idList = mutableListOf<String>() val idList = mutableListOf<String>()
if (list.size == 0) { if (list.size == 0) {
} else { } else {
for (i in list) { for (i in list) {
val markerInterface: MarkerInterface = val markerInterface: MarkerInterface =
@ -120,50 +193,61 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
layer layer
} }
init {
//新增marker图标样式
val mDefaultBitmap =
AndroidBitmap(BitmapFactory.decodeResource(context.resources, R.mipmap.marker));
val markerSymbol = MarkerSymbol( private val markerRendererFactory: MarkerRendererFactory by lazy {
mDefaultBitmap, val bitmapPoi: Bitmap = AndroidBitmap(
MarkerSymbol.HotspotPlace.BOTTOM_CENTER BitmapFactory.decodeResource(
); mContext.resources,
//新增marker图层 R.mipmap.map_icon_blue2
mDefaultMarkerLayer = ItemizedLayer( )
mapView.vtmMap,
ArrayList<MarkerInterface>(),
markerSymbol,
object : OnItemGestureListener<MarkerInterface> {
override fun onItemSingleTapUp(index: Int, item: MarkerInterface?): Boolean {
return false
}
override fun onItemLongPress(index: Int, item: MarkerInterface?): Boolean {
return false
}
}
) )
val symbol = MarkerSymbol(bitmapPoi, MarkerSymbol.HotspotPlace.BOTTOM_CENTER)
MarkerRendererFactory { markerLayer ->
object : ClusterMarkerRenderer(
mContext,
markerLayer,
symbol,
ClusterStyle(
org.oscim.backend.canvas.Color.WHITE,
org.oscim.backend.canvas.Color.BLUE
)
) {
// override fun getClusterBitmap(size: Int): Bitmap? {
// return super.getclusterbitmap(size)
// }
}
}
}
private val resId = R.mipmap.map_icon_report
private val noteResId = R.drawable.icon_note_marker
private var itemListener: OnQsRecordItemClickListener? = null
//初始化之间数据图层 /**
initQsRecordDataLayer() * 文字大小
addLayer(mDefaultMarkerLayer, NIMapView.LAYER_GROUPS.OPERATE_MARKER); */
private val NUM_13 = 13
init {
// 设置矢量图层均在12级以上才显示 // 设置矢量图层均在12级以上才显示
mMapView.vtmMap.events.bind(Map.UpdateListener { e, mapPosition -> mMapView.vtmMap.events.bind(Map.UpdateListener { e, mapPosition ->
if (e == Map.SCALE_EVENT) { if (e == Map.SCALE_EVENT) {
itemizedLayer.isEnabled = mapPosition.getZoomLevel() >= 12 qsRecordItemizedLayer.isEnabled = mapPosition.getZoomLevel() >= 12
} }
}) })
initNoteData()
mMapView.updateMap()
} }
/**
* 设置marker 点击回调
*/
fun setOnQsRecordItemClickListener(listener: OnQsRecordItemClickListener?) { fun setOnQsRecordItemClickListener(listener: OnQsRecordItemClickListener?) {
itemListener = listener itemListener = listener
} }
//增加marker /**
* 增加marker
*/
fun addMarker( fun addMarker(
geoPoint: GeoPoint, geoPoint: GeoPoint,
title: String?, title: String?,
@ -177,16 +261,16 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
} }
} }
if (marker == null) { if (marker == null) {
var tempTitle = title; var tempTitle = title
if (tempTitle.isNullOrBlank()) { if (tempTitle.isNullOrBlank()) {
tempTitle = StringUtil.createUUID(); tempTitle = StringUtil.createUUID()
} }
val marker = MarkerItem( val marker = MarkerItem(
tempTitle, tempTitle,
description, description,
geoPoint geoPoint
) )
mDefaultMarkerLayer.addItem(marker); mDefaultMarkerLayer.addItem(marker)
mMapView.vtmMap.updateMap(true) mMapView.vtmMap.updateMap(true)
} else { } else {
marker.description = description marker.description = description
@ -218,26 +302,24 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
/** /**
* 增加或更新marker * 增加或更新marker
*/ */
suspend fun addOrUpdateQsRecordMark(data: QsRecordBean) { fun addOrUpdateQsRecordMark(data: QsRecordBean) {
for (item in itemizedLayer.itemList) { for (item in qsRecordItemizedLayer.itemList) {
if (item is MarkerItem) { if (item is MarkerItem) {
if (item.title == data.id) { if (item.title == data.id) {
itemizedLayer.itemList.remove(item) qsRecordItemizedLayer.itemList.remove(item)
break break
} }
} }
} }
createMarkerItem(data) createQsRecordMarker(data)
withContext(Dispatchers.Main) { mMapView.updateMap(true)
mMapView.updateMap(true)
}
} }
/** /**
* 增加或更新便签 * 增加或更新便签
*/ */
suspend fun addOrUpdateNoteMark(data: NoteBean) { fun addOrUpdateNoteMark(data: NoteBean) {
for (item in noteLayer.itemList) { for (item in noteLayer.itemList) {
if (item is MarkerItem) { if (item is MarkerItem) {
if (item.title == data.id) { if (item.title == data.id) {
@ -248,9 +330,7 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
} }
noteLineLayer.removeNoteBeanLines(data) noteLineLayer.removeNoteBeanLines(data)
createNoteMarkerItem(data) createNoteMarkerItem(data)
withContext(Dispatchers.Main) { mMapView.updateMap(true)
mMapView.updateMap(true)
}
} }
@ -258,19 +338,13 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
var resultDrawable: Drawable? = null var resultDrawable: Drawable? = null
if ("POINT" == geometry.geometryType.uppercase(Locale.getDefault())) { if ("POINT" == geometry.geometryType.uppercase(Locale.getDefault())) {
val geoPoint = GeoPoint(geometry.coordinate.y, geometry.coordinate.x) val geoPoint = GeoPoint(geometry.coordinate.y, geometry.coordinate.x)
if (geoPoint != null) { resultDrawable = PointDrawable(geoPoint, vectorLayerStyle)
resultDrawable = PointDrawable(geoPoint, vectorLayerStyle)
}
} else if ("LINESTRING" == geometry.geometryType.uppercase(Locale.getDefault())) { } else if ("LINESTRING" == geometry.geometryType.uppercase(Locale.getDefault())) {
val lineString = geometry as LineString val lineString = geometry as LineString
if (lineString != null) { resultDrawable = LineDrawable(lineString, vectorLayerStyle)
resultDrawable = LineDrawable(lineString, vectorLayerStyle)
}
} else if ("POLYGON" == geometry.geometryType.uppercase(Locale.getDefault())) { } else if ("POLYGON" == geometry.geometryType.uppercase(Locale.getDefault())) {
val polygon = geometry as Polygon val polygon = geometry as Polygon
if (polygon != null) { resultDrawable = PolygonDrawable(polygon, vectorLayerStyle)
resultDrawable = PolygonDrawable(polygon, vectorLayerStyle)
}
} }
return resultDrawable return resultDrawable
} }
@ -279,12 +353,12 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
/** /**
* 删除质检数据 * 删除质检数据
*/ */
suspend fun removeQsRecordMark(data: QsRecordBean) { fun removeQsRecordMark(data: QsRecordBean) {
for (item in itemizedLayer.itemList) { for (item in qsRecordItemizedLayer.itemList) {
if (item is MarkerItem) { if (item is MarkerItem) {
if (item.title == data.id) { if (item.title == data.id) {
itemizedLayer.itemList.remove(item) qsRecordItemizedLayer.itemList.remove(item)
itemizedLayer.populate() qsRecordItemizedLayer.populate()
return return
} }
} }
@ -294,141 +368,56 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
/** /**
* 删除标签 * 删除标签
*/ */
suspend fun removeNoteMark(data: NoteBean) { fun removeNoteMark(data: NoteBean) {
for (item in noteLayer.itemList) { for (item in noteLayer.itemList) {
if (item is MarkerItem) { if (item is MarkerItem) {
if (item.title == data.id) { if (item.title == data.id) {
noteLayer.itemList.remove(item) noteLayer.itemList.remove(item)
noteLineLayer.removeNoteBeanLines(data) noteLineLayer.removeNoteBeanLines(data)
noteLayer.populate() noteLayer.populate()
withContext(Dispatchers.Main) { mMapView.updateMap(true)
mMapView.updateMap(true)
}
return return
} }
} }
} }
} }
/**
* 初始化便签
*/
private fun initNoteData() {
mContext.lifecycleScope.launch(Dispatchers.IO) {
var list = mutableListOf<NoteBean>()
val realm = Realm.getDefaultInstance()
realm.executeTransaction {
val objects = realm.where<NoteBean>().findAll()
list = realm.copyFromRealm(objects)
}
for (item in list) { // /**
createNoteMarkerItem(item) // * 初始话质检数据图层
} // */
} // private fun initQsRecordDataLayer() {
} //
// mContext.lifecycleScope.launch(Dispatchers.IO) {
/** // var list = mutableListOf<QsRecordBean>()
* 初始话质检数据图层 // val realm = Realm.getDefaultInstance()
*/ // realm.executeTransaction {
private fun initQsRecordDataLayer() { // val objects = realm.where<QsRecordBean>().findAll()
// list = realm.copyFromRealm(objects)
canvas = CanvasAdapter.newCanvas() // }
paint = CanvasAdapter.newPaint() // for (item in list) {
paint.setTypeface(Paint.FontFamily.DEFAULT, Paint.FontStyle.NORMAL) // createMarkerItem(item)
paint.setTextSize(NUM_13 * CanvasAdapter.getScale()) // }
paint.strokeWidth = 2 * CanvasAdapter.getScale() // }
paint.color = Color.parseColor(mDefaultTextColor) //
val bitmapPoi: Bitmap = AndroidBitmap( // }
BitmapFactory.decodeResource(
mContext.resources,
R.mipmap.map_icon_blue2
)
)
val symbol = MarkerSymbol(bitmapPoi, MarkerSymbol.HotspotPlace.BOTTOM_CENTER)
markerRendererFactory = MarkerRendererFactory { markerLayer ->
object : ClusterMarkerRenderer(
mContext,
markerLayer,
symbol,
ClusterStyle(
org.oscim.backend.canvas.Color.WHITE,
org.oscim.backend.canvas.Color.BLUE
)
) {
// override fun getClusterBitmap(size: Int): Bitmap? {
// return super.getclusterbitmap(size)
// }
}
}
itemizedLayer =
MyItemizedLayer(
mMapView.vtmMap,
mutableListOf(),
markerRendererFactory,
object : MyItemizedLayer.OnItemGestureListener {
override fun onItemSingleTapUp(
list: MutableList<Int>,
nearest: Int
): Boolean {
itemListener?.let {
val idList = mutableListOf<String>()
if (list.size == 0) {
} else {
for (i in list) {
val markerInterface: MarkerInterface =
itemizedLayer.itemList[i]
if (markerInterface is MarkerItem) {
idList.add(markerInterface.title)
}
}
it.onQsRecordList(idList.distinct().toMutableList())
}
}
return true
}
override fun onItemLongPress(
list: MutableList<Int>?,
nearest: Int
): Boolean {
return true
}
})
addLayer(itemizedLayer, NIMapView.LAYER_GROUPS.OPERATE_MARKER)
mContext.lifecycleScope.launch(Dispatchers.IO) {
var list = mutableListOf<QsRecordBean>()
val realm = Realm.getDefaultInstance()
realm.executeTransaction {
val objects = realm.where<QsRecordBean>().findAll()
list = realm.copyFromRealm(objects)
}
// realm.close()
for (item in list) {
createMarkerItem(item)
}
}
}
/** /**
* 添加质检数据marker * 添加质检数据marker
*/ */
private suspend fun createNoteMarkerItem(item: NoteBean) { private fun createNoteMarkerItem(item: NoteBean) {
val bitmap: Bitmap = createTextMarkerBitmap(mContext, item.description, noteResId) val bitmap: Bitmap = createTextMarkerBitmap(mContext, item.description, noteResId)
val geometry: Geometry? = GeometryTools.createGeometry(item.guideGeometry) val geometry: Geometry? = GeometryTools.createGeometry(item.guideGeometry)
if (geometry != null) { if (geometry != null) {
var geoPoint: org.oscim.core.GeoPoint? = null var geoPoint: GeoPoint? = null
if (geometry.geometryType != null) { if (geometry.geometryType != null) {
when (geometry.geometryType.uppercase(Locale.getDefault())) { when (geometry.geometryType.uppercase(Locale.getDefault())) {
"POINT" -> geoPoint = "POINT" -> geoPoint =
org.oscim.core.GeoPoint(geometry.coordinate.y, geometry.coordinate.x) GeoPoint(geometry.coordinate.y, geometry.coordinate.x)
} }
} }
if (geoPoint != null) { if (geoPoint != null) {
var geoMarkerItem: MarkerItem val geoMarkerItem: MarkerItem
geoMarkerItem = ClusterMarkerItem( geoMarkerItem = ClusterMarkerItem(
1, item.id, item.description, geoPoint 1, item.id, item.description, geoPoint
) )
@ -446,16 +435,16 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
/** /**
* 添加质检数据marker * 添加质检数据marker
*/ */
private suspend fun createMarkerItem(item: QsRecordBean) { private fun createQsRecordMarker(item: QsRecordBean) {
val bitmap: Bitmap = createTextMarkerBitmap(mContext, item.description, resId) val bitmap: Bitmap = createTextMarkerBitmap(mContext, item.description, resId)
if (item.t_lifecycle != 2) { if (item.t_lifecycle != 2) {
val geometry: Geometry? = GeometryTools.createGeometry(item.geometry) val geometry: Geometry? = GeometryTools.createGeometry(item.geometry)
if (geometry != null) { if (geometry != null) {
var geoPoint: org.oscim.core.GeoPoint? = null var geoPoint: GeoPoint? = null
if (geometry.geometryType != null) { if (geometry.geometryType != null) {
when (geometry.geometryType.uppercase(Locale.getDefault())) { when (geometry.geometryType.uppercase(Locale.getDefault())) {
"POINT" -> geoPoint = "POINT" -> geoPoint =
org.oscim.core.GeoPoint(geometry.coordinate.y, geometry.coordinate.x) GeoPoint(geometry.coordinate.y, geometry.coordinate.x)
// "LINESTRING" -> { // "LINESTRING" -> {
// val lineString = geometry as LineString // val lineString = geometry as LineString
// if (lineString != null && lineString.coordinates.size > 0) { // if (lineString != null && lineString.coordinates.size > 0) {
@ -487,7 +476,7 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
} }
} }
if (geoPoint != null) { if (geoPoint != null) {
var geoMarkerItem: MarkerItem val geoMarkerItem: MarkerItem
// if (item.getType() === 1) { // if (item.getType() === 1) {
geoMarkerItem = ClusterMarkerItem( geoMarkerItem = ClusterMarkerItem(
1, item.id, item.description, geoPoint 1, item.id, item.description, geoPoint
@ -503,11 +492,11 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
val markerSymbol = val markerSymbol =
MarkerSymbol(bitmap, MarkerSymbol.HotspotPlace.CENTER) MarkerSymbol(bitmap, MarkerSymbol.HotspotPlace.CENTER)
geoMarkerItem.marker = markerSymbol geoMarkerItem.marker = markerSymbol
itemizedLayer.itemList.add(geoMarkerItem) qsRecordItemizedLayer.itemList.add(geoMarkerItem)
} }
} }
} }
itemizedLayer.populate() qsRecordItemizedLayer.populate()
} }
@ -700,7 +689,7 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
val originBitmap = android.graphics.Bitmap.createBitmap( val originBitmap = android.graphics.Bitmap.createBitmap(
if (drawable.intrinsicWidth > maxWidth) drawable.intrinsicWidth else maxWidth.toInt(), if (drawable.intrinsicWidth > maxWidth) drawable.intrinsicWidth else maxWidth.toInt(),
drawable.intrinsicHeight * 2, drawable.intrinsicHeight * 2,
android.graphics.Bitmap.Config.ARGB_4444 android.graphics.Bitmap.Config.ARGB_8888
) )
val androidCanvas = Canvas(originBitmap) val androidCanvas = Canvas(originBitmap)
val startX = (originBitmap.width - drawable.intrinsicWidth) / 2 val startX = (originBitmap.width - drawable.intrinsicWidth) / 2