Skip to content

Instantly share code, notes, and snippets.

View utsmannn's full-sized avatar
😼
kerja

Muhammad Utsman utsmannn

😼
kerja
View GitHub Profile
(map_view as SupportMapFragment).getMapAsync { map ->
// move camera ke jakarta
map.moveCamera(CameraUpdateFactory.newLatLngZoom(jakartaLatLng, 18f))
// get old position camera
val oldPosition = map.cameraPosition.target
map.setOnCameraMoveStartedListener {
// drag started
}
fun moveMarkerSmoothly(marker: Marker, newLatLng: LatLng) {
val animator: ValueAnimator = movementAnimator(marker, newLatLng)
animator.start()
val f = getAngle(marker.position, newLatLng).toFloat()
rotateMarker(marker, f)
}
fun rotateMarker(marker: Marker, toRotation: Float) {
val handler = Handler()
val start = SystemClock.uptimeMillis()
val startRotation = marker.rotation
val duration: Long = 300
handler.post(object : Runnable {
override fun run() {
val elapsed = SystemClock.uptimeMillis() - start
val t = LinearInterpolator().getInterpolation(elapsed.toFloat() / duration)
fun getAngle(fromLatLon: LatLng, toLatLon: LatLng): Double {
var heading = 0.0
if (fromLatLon != toLatLon) {
heading = MathUtil.computeHeading(fromLatLon, toLatLon)
}
return heading
}
object MathUtil {
fun computeHeading(from: LatLng, to: LatLng): Double {
val fromLat = Math.toRadians(from.latitude)
val fromLng = Math.toRadians(from.longitude)
val toLat = Math.toRadians(to.latitude)
val toLng = Math.toRadians(to.longitude)
val dLng = toLng - fromLng
val heading = atan2(
sin(dLng) * cos(toLat),
cos(fromLat) * sin(toLat) - sin(fromLat) * cos(toLat) * cos(dLng)
val marker = map.addMarker(markerOption)
map.setOnMapClickListener { newLatLng ->
val animator = MarkerUtil.movementAnimator(marker, newLatLng)
animator.start()
}
fun movementAnimator(marker: Marker, newLatLng: LatLng) : ValueAnimator {
val animator = ValueAnimator.ofFloat(0f, 100f)
val deltaLatitude = doubleArrayOf(newLatLng.latitude - marker.position.latitude)
val deltaLongitude = newLatLng.longitude - marker.position.longitude
val prevStep = floatArrayOf(0f)
animator.duration = 1500
animator.addUpdateListener { animation ->
val deltaStep = (animation.animatedValue as Float - prevStep[0]).toDouble()
fun bitmapFromVector(context: Context, @DrawableRes icon: Int): BitmapDescriptor {
val background = ContextCompat.getDrawable(context, icon)
background!!.setBounds(0, 0, background.intrinsicWidth, background.intrinsicHeight)
val bitmap = Bitmap.createBitmap(background.intrinsicWidth, background.intrinsicHeight, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
background.draw(canvas)
return BitmapDescriptorFactory.fromBitmap(bitmap)
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
....
// Pengambilan nilai intro
SharedPreferences preferences = getSharedPreferences("intro", Context.MODE_PRIVATE);
Boolean introComplete = preferences.getBoolean("intro_complete", false); // secara default nilai intro bernilai false
// Jika intro bernilai false
if (!introComplete) {