diff options
author | Allan Wang <me@allanwang.ca> | 2019-07-03 14:01:19 -0700 |
---|---|---|
committer | Allan Wang <me@allanwang.ca> | 2019-07-03 14:01:19 -0700 |
commit | 16ab9a8dfae44eb26c6e0de6e16ada6c2641cb23 (patch) | |
tree | 66a494dc3fa9235808d832a1c611c2b702c7f07b /app/src/main/kotlin/com/pitchedapps/frost/views/DragFrame.kt | |
parent | 6685ed8d7194a495820b2a06378f738cd6612ad3 (diff) | |
download | frost-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.kt | 39 |
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) { |