aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/views/DragFrame.kt
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2019-07-03 14:01:19 -0700
committerAllan Wang <me@allanwang.ca>2019-07-03 14:01:19 -0700
commit16ab9a8dfae44eb26c6e0de6e16ada6c2641cb23 (patch)
tree66a494dc3fa9235808d832a1c611c2b702c7f07b /app/src/main/kotlin/com/pitchedapps/frost/views/DragFrame.kt
parent6685ed8d7194a495820b2a06378f738cd6612ad3 (diff)
downloadfrost-16ab9a8dfae44eb26c6e0de6e16ada6c2641cb23.tar.gz
frost-16ab9a8dfae44eb26c6e0de6e16ada6c2641cb23.tar.bz2
frost-16ab9a8dfae44eb26c6e0de6e16ada6c2641cb23.zip
Redo image activity to support text content
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/views/DragFrame.kt')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/views/DragFrame.kt39
1 files changed, 39 insertions, 0 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/views/DragFrame.kt b/app/src/main/kotlin/com/pitchedapps/frost/views/DragFrame.kt
index c2f36536..2ba490cb 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/views/DragFrame.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/views/DragFrame.kt
@@ -18,20 +18,34 @@ package com.pitchedapps.frost.views
import android.annotation.SuppressLint
import android.content.Context
+import android.graphics.Rect
import android.util.AttributeSet
import android.view.MotionEvent
+import android.view.View
import android.widget.FrameLayout
import androidx.core.view.ViewCompat
import androidx.customview.widget.ViewDragHelper
+import com.pitchedapps.frost.utils.L
class DragFrame @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {
+
var dragHelper: ViewDragHelper? = null
+ var viewToIgnore: View? = null
+ private val rect = Rect()
+ private val location = IntArray(2)
+ private var shouldIgnore: Boolean = false
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
+ if (event.actionMasked == MotionEvent.ACTION_DOWN) {
+ shouldIgnore = shouldIgnore(event)
+ }
+ if (shouldIgnore) {
+ return false
+ }
return try {
dragHelper?.shouldInterceptTouchEvent(event) ?: false
} catch (e: Exception) {
@@ -41,6 +55,12 @@ class DragFrame @JvmOverloads constructor(
@SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(event: MotionEvent): Boolean {
+ if (event.actionMasked == MotionEvent.ACTION_DOWN) {
+ shouldIgnore = shouldIgnore(event)
+ }
+ if (shouldIgnore) {
+ return false
+ }
try {
dragHelper?.processTouchEvent(event) ?: return false
} catch (e: Exception) {
@@ -49,6 +69,25 @@ class DragFrame @JvmOverloads constructor(
return true
}
+ override fun dispatchTouchEvent(event: MotionEvent): Boolean {
+ if (event.actionMasked == MotionEvent.ACTION_DOWN) {
+ shouldIgnore = shouldIgnore(event)
+ }
+ if (shouldIgnore) {
+ return false
+ }
+ return super.dispatchTouchEvent(event)
+ }
+
+ private fun shouldIgnore(event: MotionEvent): Boolean {
+ val v = viewToIgnore ?: return false
+ v.getDrawingRect(rect)
+ v.getLocationOnScreen(location)
+ rect.offset(location[0], location[1])
+ L.d { "${event.rawX} ${event.x} ${event.rawY} ${event.y} ${rect}" }
+ return rect.contains(event.rawX.toInt(), event.rawY.toInt())
+ }
+
override fun computeScroll() {
super.computeScroll()
if (dragHelper?.continueSettling(true) == true) {