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