parent
7f6c10db75
commit
226f96fc09
@ -0,0 +1,72 @@
|
||||
package uca.baptistearthur.geocaching
|
||||
|
||||
import android.graphics.*
|
||||
import android.graphics.drawable.shapes.Shape
|
||||
import android.location.Location
|
||||
import android.view.GestureDetector
|
||||
import android.view.MotionEvent
|
||||
import androidx.appcompat.widget.AppCompatDrawableManager
|
||||
import androidx.core.content.ContextCompat
|
||||
import org.osmdroid.util.GeoPoint
|
||||
import org.osmdroid.views.MapView
|
||||
import org.osmdroid.views.overlay.Overlay
|
||||
import org.osmdroid.views.overlay.mylocation.IMyLocationConsumer
|
||||
import org.osmdroid.views.overlay.mylocation.IMyLocationProvider
|
||||
|
||||
|
||||
class RecenterOverlay(val myLocationProvider: IMyLocationProvider, val mapView: MapView) : Overlay(), GestureDetector.OnGestureListener, IMyLocationConsumer {
|
||||
|
||||
private val gestureDetector: GestureDetector = GestureDetector(mapView.context, this)
|
||||
|
||||
private var circleRectF=RectF();
|
||||
|
||||
|
||||
override fun draw(canvas: Canvas, mapView: MapView, shadow: Boolean) {
|
||||
|
||||
val circleSize = 300f
|
||||
val circlePadding = 20f
|
||||
val circleX = canvas.width - circleSize - circlePadding
|
||||
val circleY = canvas.height - circleSize - circlePadding
|
||||
circleRectF=RectF(circleX, circleY, circleX + circleSize, circleY + circleSize)
|
||||
|
||||
val paint = Paint().apply {
|
||||
color = Color.WHITE
|
||||
style = Paint.Style.FILL
|
||||
}
|
||||
canvas.drawCircle(
|
||||
circleX + circleSize / 2,
|
||||
circleY + circleSize / 2,
|
||||
circleSize / 2,
|
||||
paint
|
||||
)
|
||||
|
||||
val iconSize = 180
|
||||
val icon = ContextCompat.getDrawable(mapView.context, R.drawable.center)
|
||||
|
||||
val iconX = (circleX + circleSize / 2 - iconSize / 2).toInt()
|
||||
val iconY = (circleY + circleSize / 2 - iconSize / 2).toInt()
|
||||
|
||||
icon?.setBounds(iconX, iconY, iconX + iconSize, iconY + iconSize)
|
||||
icon?.draw(canvas)
|
||||
}
|
||||
|
||||
fun enableMyLocation() {
|
||||
myLocationProvider.startLocationProvider(this);
|
||||
}
|
||||
|
||||
override fun onSingleTapConfirmed(e: MotionEvent?, mapView: MapView?) =
|
||||
myLocationProvider.lastKnownLocation?.let {
|
||||
if (e != null && circleRectF.contains(e.x, e.y)) {
|
||||
mapView?.controller?.setCenter(GeoPoint(it.latitude, it.longitude))
|
||||
}
|
||||
true
|
||||
} ?: false
|
||||
|
||||
override fun onDown(p0: MotionEvent) = true
|
||||
override fun onShowPress(p0: MotionEvent) = Unit
|
||||
override fun onSingleTapUp(p0: MotionEvent) = true
|
||||
override fun onScroll(p0: MotionEvent, p1: MotionEvent, p2: Float, p3: Float) = true;
|
||||
override fun onLongPress(p0: MotionEvent) = Unit
|
||||
override fun onFling(p0: MotionEvent, p1: MotionEvent, p2: Float, p3: Float) = true
|
||||
override fun onLocationChanged(location: Location?, source: IMyLocationProvider?) = Unit
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#000000"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M5,15L3,15v4c0,1.1 0.9,2 2,2h4v-2L5,19v-4zM5,5h4L9,3L5,3c-1.1,0 -2,0.9 -2,2v4h2L5,5zM19,3h-4v2h4v4h2L21,5c0,-1.1 -0.9,-2 -2,-2zM19,19h-4v2h4c1.1,0 2,-0.9 2,-2v-4h-2v4zM12,8c-2.21,0 -4,1.79 -4,4s1.79,4 4,4 4,-1.79 4,-4 -1.79,-4 -4,-4zM12,14c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2z"/>
|
||||
</vector>
|
Loading…
Reference in new issue