remove the static variables from MyScalableRecyclerView
This commit is contained in:
parent
aed1d64e43
commit
c6066bcdc4
|
@ -134,7 +134,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
mStoredAnimateGifs = config.animateGifs
|
mStoredAnimateGifs = config.animateGifs
|
||||||
mStoredCropThumbnails = config.cropThumbnails
|
mStoredCropThumbnails = config.cropThumbnails
|
||||||
mStoredScrollHorizontally = config.scrollHorizontally
|
mStoredScrollHorizontally = config.scrollHorizontally
|
||||||
MyScalableRecyclerView.mListener = null
|
directories_grid.listener = null
|
||||||
mLastMediaHandler.removeCallbacksAndMessages(null)
|
mLastMediaHandler.removeCallbacksAndMessages(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -242,7 +242,7 @@ class MainActivity : SimpleActivity(), DirectoryAdapter.DirOperationsListener {
|
||||||
directories_grid.isDragSelectionEnabled = true
|
directories_grid.isDragSelectionEnabled = true
|
||||||
directories_grid.isZoomingEnabled = true
|
directories_grid.isZoomingEnabled = true
|
||||||
layoutManager.spanCount = config.dirColumnCnt
|
layoutManager.spanCount = config.dirColumnCnt
|
||||||
MyScalableRecyclerView.mListener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener {
|
directories_grid.listener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener {
|
||||||
override fun zoomIn() {
|
override fun zoomIn() {
|
||||||
if (layoutManager.spanCount > 1) {
|
if (layoutManager.spanCount > 1) {
|
||||||
reduceColumnCount()
|
reduceColumnCount()
|
||||||
|
|
|
@ -102,7 +102,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
mStoredAnimateGifs = config.animateGifs
|
mStoredAnimateGifs = config.animateGifs
|
||||||
mStoredCropThumbnails = config.cropThumbnails
|
mStoredCropThumbnails = config.cropThumbnails
|
||||||
mStoredScrollHorizontally = config.scrollHorizontally
|
mStoredScrollHorizontally = config.scrollHorizontally
|
||||||
MyScalableRecyclerView.mListener = null
|
media_grid.listener = null
|
||||||
mLastMediaHandler.removeCallbacksAndMessages(null)
|
mLastMediaHandler.removeCallbacksAndMessages(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,7 +318,7 @@ class MediaActivity : SimpleActivity(), MediaAdapter.MediaOperationsListener {
|
||||||
media_grid.isDragSelectionEnabled = true
|
media_grid.isDragSelectionEnabled = true
|
||||||
media_grid.isZoomingEnabled = true
|
media_grid.isZoomingEnabled = true
|
||||||
layoutManager.spanCount = config.mediaColumnCnt
|
layoutManager.spanCount = config.mediaColumnCnt
|
||||||
MyScalableRecyclerView.mListener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener {
|
media_grid.listener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener {
|
||||||
override fun zoomIn() {
|
override fun zoomIn() {
|
||||||
if (layoutManager.spanCount > 1) {
|
if (layoutManager.spanCount > 1) {
|
||||||
reduceColumnCount()
|
reduceColumnCount()
|
||||||
|
|
|
@ -13,6 +13,7 @@ class MyScalableRecyclerView : RecyclerView {
|
||||||
private val AUTO_SCROLL_DELAY = 25L
|
private val AUTO_SCROLL_DELAY = 25L
|
||||||
var isZoomingEnabled = false
|
var isZoomingEnabled = false
|
||||||
var isDragSelectionEnabled = false
|
var isDragSelectionEnabled = false
|
||||||
|
var listener: MyScalableRecyclerViewListener? = null
|
||||||
|
|
||||||
private var mScaleDetector: ScaleGestureDetector
|
private var mScaleDetector: ScaleGestureDetector
|
||||||
|
|
||||||
|
@ -35,11 +36,8 @@ class MyScalableRecyclerView : RecyclerView {
|
||||||
private var inTopHotspot = false
|
private var inTopHotspot = false
|
||||||
private var inBottomHotspot = false
|
private var inBottomHotspot = false
|
||||||
|
|
||||||
companion object {
|
private var currScaleFactor = 1.0f
|
||||||
var mListener: MyScalableRecyclerViewListener? = null
|
private var lastUp = 0L // allow only pinch zoom, not double tap
|
||||||
var mCurrScaleFactor = 1.0f
|
|
||||||
var mLastUp = 0L // allow only pinch zoom, not double tap
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(context: Context) : super(context)
|
constructor(context: Context) : super(context)
|
||||||
|
|
||||||
|
@ -47,7 +45,20 @@ class MyScalableRecyclerView : RecyclerView {
|
||||||
|
|
||||||
init {
|
init {
|
||||||
hotspotHeight = context.resources.getDimensionPixelSize(R.dimen.dragselect_hotspot_height)
|
hotspotHeight = context.resources.getDimensionPixelSize(R.dimen.dragselect_hotspot_height)
|
||||||
mScaleDetector = ScaleGestureDetector(context, GestureListener())
|
|
||||||
|
val gestureListener = object : MyGestureListenerInterface {
|
||||||
|
override fun getLastUp() = lastUp
|
||||||
|
|
||||||
|
override fun getScaleFactor() = currScaleFactor
|
||||||
|
|
||||||
|
override fun setScaleFactor(value: Float) {
|
||||||
|
currScaleFactor = value
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getMainListener() = listener
|
||||||
|
}
|
||||||
|
|
||||||
|
mScaleDetector = ScaleGestureDetector(context, GestureListener(gestureListener))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMeasure(widthSpec: Int, heightSpec: Int) {
|
override fun onMeasure(widthSpec: Int, heightSpec: Int) {
|
||||||
|
@ -83,8 +94,8 @@ class MyScalableRecyclerView : RecyclerView {
|
||||||
inTopHotspot = false
|
inTopHotspot = false
|
||||||
inBottomHotspot = false
|
inBottomHotspot = false
|
||||||
autoScrollHandler.removeCallbacks(autoScrollRunnable)
|
autoScrollHandler.removeCallbacks(autoScrollRunnable)
|
||||||
mCurrScaleFactor = 1.0f
|
currScaleFactor = 1.0f
|
||||||
mLastUp = System.currentTimeMillis()
|
lastUp = System.currentTimeMillis()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,7 +150,7 @@ class MyScalableRecyclerView : RecyclerView {
|
||||||
minReached = lastDraggedIndex
|
minReached = lastDraggedIndex
|
||||||
}
|
}
|
||||||
|
|
||||||
mListener?.selectRange(initialSelection, lastDraggedIndex, minReached, maxReached)
|
listener?.selectRange(initialSelection, lastDraggedIndex, minReached, maxReached)
|
||||||
|
|
||||||
if (initialSelection == lastDraggedIndex) {
|
if (initialSelection == lastDraggedIndex) {
|
||||||
minReached = lastDraggedIndex
|
minReached = lastDraggedIndex
|
||||||
|
@ -166,7 +177,7 @@ class MyScalableRecyclerView : RecyclerView {
|
||||||
maxReached = -1
|
maxReached = -1
|
||||||
this.initialSelection = initialSelection
|
this.initialSelection = initialSelection
|
||||||
dragSelectActive = true
|
dragSelectActive = true
|
||||||
mListener?.selectItem(initialSelection)
|
listener?.selectItem(initialSelection)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getItemPosition(e: MotionEvent): Int {
|
private fun getItemPosition(e: MotionEvent): Int {
|
||||||
|
@ -181,21 +192,23 @@ class MyScalableRecyclerView : RecyclerView {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class GestureListener : ScaleGestureDetector.SimpleOnScaleGestureListener() {
|
class GestureListener(val gestureListener: MyGestureListenerInterface) : ScaleGestureDetector.SimpleOnScaleGestureListener() {
|
||||||
private val ZOOM_IN_THRESHOLD = -0.4f
|
private val ZOOM_IN_THRESHOLD = -0.4f
|
||||||
private val ZOOM_OUT_THRESHOLD = 0.15f
|
private val ZOOM_OUT_THRESHOLD = 0.15f
|
||||||
|
|
||||||
override fun onScale(detector: ScaleGestureDetector): Boolean {
|
override fun onScale(detector: ScaleGestureDetector): Boolean {
|
||||||
if (System.currentTimeMillis() - mLastUp < 1000)
|
gestureListener.apply {
|
||||||
|
if (System.currentTimeMillis() - getLastUp() < 1000)
|
||||||
return false
|
return false
|
||||||
|
|
||||||
val diff = mCurrScaleFactor - detector.scaleFactor
|
val diff = getScaleFactor() - detector.scaleFactor
|
||||||
if (diff < ZOOM_IN_THRESHOLD && mCurrScaleFactor == 1.0f) {
|
if (diff < ZOOM_IN_THRESHOLD && getScaleFactor() == 1.0f) {
|
||||||
mListener?.zoomIn()
|
getMainListener()?.zoomIn()
|
||||||
mCurrScaleFactor = detector.scaleFactor
|
setScaleFactor(detector.scaleFactor)
|
||||||
} else if (diff > ZOOM_OUT_THRESHOLD && mCurrScaleFactor == 1.0f) {
|
} else if (diff > ZOOM_OUT_THRESHOLD && getScaleFactor() == 1.0f) {
|
||||||
mListener?.zoomOut()
|
getMainListener()?.zoomOut()
|
||||||
mCurrScaleFactor = detector.scaleFactor
|
setScaleFactor(detector.scaleFactor)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -210,4 +223,14 @@ class MyScalableRecyclerView : RecyclerView {
|
||||||
|
|
||||||
fun selectRange(initialSelection: Int, lastDraggedIndex: Int, minReached: Int, maxReached: Int)
|
fun selectRange(initialSelection: Int, lastDraggedIndex: Int, minReached: Int, maxReached: Int)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface MyGestureListenerInterface {
|
||||||
|
fun getLastUp(): Long
|
||||||
|
|
||||||
|
fun getScaleFactor(): Float
|
||||||
|
|
||||||
|
fun setScaleFactor(value: Float)
|
||||||
|
|
||||||
|
fun getMainListener(): MyScalableRecyclerViewListener?
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue