From 2df51efa38356d01d9491ed27cc104c075ca1c0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Sat, 28 Sep 2019 15:15:19 +0200 Subject: [PATCH] Draw DPad Press on Android --- .../java/com/metallic/chiaki/StreamSession.kt | 2 +- .../metallic/chiaki/touchcontrols/DPadView.kt | 42 ++++++++++++++----- ...control_dpad.xml => control_dpad_idle.xml} | 0 .../main/res/drawable/control_dpad_left.xml | 34 +++++++++++++++ android/app/src/main/res/values/colors.xml | 1 + 5 files changed, 67 insertions(+), 12 deletions(-) rename android/app/src/main/res/drawable/{control_dpad.xml => control_dpad_idle.xml} (100%) create mode 100644 android/app/src/main/res/drawable/control_dpad_left.xml diff --git a/android/app/src/main/java/com/metallic/chiaki/StreamSession.kt b/android/app/src/main/java/com/metallic/chiaki/StreamSession.kt index 0463f07..b3af30f 100644 --- a/android/app/src/main/java/com/metallic/chiaki/StreamSession.kt +++ b/android/app/src/main/java/com/metallic/chiaki/StreamSession.kt @@ -35,7 +35,7 @@ data class StreamStateLoginPinRequest(val pinIncorrect: Boolean): StreamState() class StreamSession(val connectInfo: ConnectInfo) { var session: Session? = null - private set(value) { field = value } + private set private val _state = MutableLiveData(StreamStateIdle) val state: LiveData get() = _state diff --git a/android/app/src/main/java/com/metallic/chiaki/touchcontrols/DPadView.kt b/android/app/src/main/java/com/metallic/chiaki/touchcontrols/DPadView.kt index ee502a5..f9ed5c9 100644 --- a/android/app/src/main/java/com/metallic/chiaki/touchcontrols/DPadView.kt +++ b/android/app/src/main/java/com/metallic/chiaki/touchcontrols/DPadView.kt @@ -18,10 +18,7 @@ package com.metallic.chiaki.touchcontrols import android.content.Context -import android.graphics.BlendMode import android.graphics.Canvas -import android.graphics.PorterDuff -import android.graphics.drawable.VectorDrawable import android.util.AttributeSet import android.util.Log import android.view.MotionEvent @@ -36,17 +33,35 @@ class DPadView @JvmOverloads constructor( { enum class Direction { LEFT, RIGHT, UP, DOWN } - private val colorPrimary = resources.getColor(R.color.control_primary, null) - private val dpadDrawable = VectorDrawableCompat.create(resources, R.drawable.control_dpad, null) + var state: Direction? = null + private set + + private val dpadIdleDrawable = VectorDrawableCompat.create(resources, R.drawable.control_dpad_idle, null) + private val dpadLeftDrawable = VectorDrawableCompat.create(resources, R.drawable.control_dpad_left, null) override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - dpadDrawable?.setBounds(0, 0, width, height) - //dpadDrawable?.setTint(colorPrimary) - //dpadDrawable?.setTintBlendMode(BlendMode.SRC_ATOP) - //dpadDrawable?.setTintMode(PorterDuff.Mode.SRC_ATOP) - dpadDrawable?.draw(canvas) + + val state = state + val drawable: VectorDrawableCompat? + if(state != null) + { + drawable = dpadLeftDrawable + when(state) + { + Direction.UP -> canvas.rotate(90f, width.toFloat() * 0.5f, height.toFloat() * 0.5f) + Direction.DOWN -> canvas.rotate(90f*3f, width.toFloat() * 0.5f, height.toFloat() * 0.5f) + Direction.LEFT -> {} + Direction.RIGHT -> canvas.rotate(90f*2f, width.toFloat() * 0.5f, height.toFloat() * 0.5f) + } + } + else + drawable = dpadIdleDrawable + + drawable?.setBounds(0, 0, width, height) + drawable?.alpha = 127 + drawable?.draw(canvas) } fun directionForPosition(x: Float, y: Float): Direction @@ -64,7 +79,12 @@ class DPadView @JvmOverloads constructor( override fun onTouchEvent(event: MotionEvent): Boolean { - Log.i("DPadView", "direction: ${directionForPosition(event.x, event.y)}") + val dir = directionForPosition(event.x, event.y) + if(event.action == MotionEvent.ACTION_UP) + state = null + else if(event.action == MotionEvent.ACTION_DOWN) + state = dir + invalidate() return true } diff --git a/android/app/src/main/res/drawable/control_dpad.xml b/android/app/src/main/res/drawable/control_dpad_idle.xml similarity index 100% rename from android/app/src/main/res/drawable/control_dpad.xml rename to android/app/src/main/res/drawable/control_dpad_idle.xml diff --git a/android/app/src/main/res/drawable/control_dpad_left.xml b/android/app/src/main/res/drawable/control_dpad_left.xml new file mode 100644 index 0000000..025e610 --- /dev/null +++ b/android/app/src/main/res/drawable/control_dpad_left.xml @@ -0,0 +1,34 @@ + + + + + + diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml index 11bd053..0db3df8 100644 --- a/android/app/src/main/res/values/colors.xml +++ b/android/app/src/main/res/values/colors.xml @@ -8,4 +8,5 @@ @android:color/black @android:color/white + #8888ff