focus the proper portrait photo at swiping the stripe
This commit is contained in:
parent
efee783e1f
commit
17003c6ab1
|
@ -19,6 +19,7 @@ class PortraitPhotosAdapter(val context: Context, val photos: ArrayList<String>,
|
||||||
RecyclerView.Adapter<PortraitPhotosAdapter.ViewHolder>() {
|
RecyclerView.Adapter<PortraitPhotosAdapter.ViewHolder>() {
|
||||||
|
|
||||||
var currentSelectionIndex = -1
|
var currentSelectionIndex = -1
|
||||||
|
var views = HashMap<Int, View>()
|
||||||
private var strokeBackground = context.resources.getDrawable(R.drawable.stroke_background)
|
private var strokeBackground = context.resources.getDrawable(R.drawable.stroke_background)
|
||||||
private val itemWidth = context.resources.getDimension(R.dimen.portrait_photos_stripe_height).toInt()
|
private val itemWidth = context.resources.getDimension(R.dimen.portrait_photos_stripe_height).toInt()
|
||||||
|
|
||||||
|
@ -37,9 +38,14 @@ class PortraitPhotosAdapter(val context: Context, val photos: ArrayList<String>,
|
||||||
if (currentSelectionIndex != position) {
|
if (currentSelectionIndex != position) {
|
||||||
currentSelectionIndex = position
|
currentSelectionIndex = position
|
||||||
notifyDataSetChanged()
|
notifyDataSetChanged()
|
||||||
|
views[position]?.performClick()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun performClickOn(position: Int) {
|
||||||
|
views[position]?.performClick()
|
||||||
|
}
|
||||||
|
|
||||||
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
|
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
|
||||||
fun bindView(photo: String, position: Int): View {
|
fun bindView(photo: String, position: Int): View {
|
||||||
itemView.apply {
|
itemView.apply {
|
||||||
|
@ -67,6 +73,7 @@ class PortraitPhotosAdapter(val context: Context, val photos: ArrayList<String>,
|
||||||
.into(portrait_photo_item_thumbnail)
|
.into(portrait_photo_item_thumbnail)
|
||||||
|
|
||||||
if (photo.isNotEmpty()) {
|
if (photo.isNotEmpty()) {
|
||||||
|
views[position] = this
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
itemClick(position, x.toInt())
|
itemClick(position, x.toInt())
|
||||||
setCurrentPhoto(position)
|
setCurrentPhoto(position)
|
||||||
|
|
|
@ -16,6 +16,7 @@ import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.util.DisplayMetrics
|
import android.util.DisplayMetrics
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
import android.view.MotionEvent
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.RelativeLayout
|
import android.widget.RelativeLayout
|
||||||
|
@ -470,6 +471,8 @@ class PhotoFragment : ViewPagerFragment() {
|
||||||
setupStripeBottomMargin()
|
setupStripeBottomMargin()
|
||||||
|
|
||||||
val coverIndex = getCoverImageIndex(paths)
|
val coverIndex = getCoverImageIndex(paths)
|
||||||
|
setupStripeUpListener(adapter, screenWidth, itemWidth)
|
||||||
|
|
||||||
mView.photo_portrait_stripe.onGlobalLayout {
|
mView.photo_portrait_stripe.onGlobalLayout {
|
||||||
mView.photo_portrait_stripe.scrollBy((coverIndex - fakeItemsCnt) * itemWidth, 0)
|
mView.photo_portrait_stripe.scrollBy((coverIndex - fakeItemsCnt) * itemWidth, 0)
|
||||||
adapter.setCurrentPhoto(coverIndex)
|
adapter.setCurrentPhoto(coverIndex)
|
||||||
|
@ -520,6 +523,28 @@ class PhotoFragment : ViewPagerFragment() {
|
||||||
return coverIndex
|
return coverIndex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun setupStripeUpListener(adapter: PortraitPhotosAdapter, screenWidth: Int, itemWidth: Int) {
|
||||||
|
mView.photo_portrait_stripe.setOnTouchListener { v, event ->
|
||||||
|
if (event.action == MotionEvent.ACTION_UP || event.action == MotionEvent.ACTION_CANCEL) {
|
||||||
|
var closestIndex = -1
|
||||||
|
var closestDistance = Integer.MAX_VALUE
|
||||||
|
val center = screenWidth / 2
|
||||||
|
for ((key, value) in adapter.views) {
|
||||||
|
val distance = Math.abs(value.x.toInt() + itemWidth / 2 - center)
|
||||||
|
if (distance < closestDistance) {
|
||||||
|
closestDistance = distance
|
||||||
|
closestIndex = key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Handler().postDelayed({
|
||||||
|
adapter.performClickOn(closestIndex)
|
||||||
|
}, 100)
|
||||||
|
}
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun openPanorama() {
|
private fun openPanorama() {
|
||||||
Intent(context, PanoramaPhotoActivity::class.java).apply {
|
Intent(context, PanoramaPhotoActivity::class.java).apply {
|
||||||
putExtra(PATH, mMedium.path)
|
putExtra(PATH, mMedium.path)
|
||||||
|
|
Loading…
Reference in New Issue