scroll the editor filters list horizontally when we reach an edge

This commit is contained in:
tibbi 2018-07-24 00:13:46 +02:00
parent 1c89721292
commit d848f0b305
6 changed files with 22 additions and 13 deletions

View file

@ -9,6 +9,7 @@ import android.graphics.Point
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.provider.MediaStore import android.provider.MediaStore
import android.support.v7.widget.LinearLayoutManager
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.widget.RelativeLayout import android.widget.RelativeLayout
@ -353,8 +354,8 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
if (currPrimaryAction == PRIMARY_ACTION_FILTER && bottom_actions_filter_list.adapter == null) { if (currPrimaryAction == PRIMARY_ACTION_FILTER && bottom_actions_filter_list.adapter == null) {
Thread { Thread {
val size = resources.getDimension(R.dimen.bottom_filters_thumbnail_height).toInt() val thumbnailSize = resources.getDimension(R.dimen.bottom_filters_thumbnail_size).toInt()
val bitmap = Glide.with(this).asBitmap().load(uri).submit(size, size).get() val bitmap = Glide.with(this).asBitmap().load(uri).submit(thumbnailSize, thumbnailSize).get()
runOnUiThread { runOnUiThread {
val filterThumbnailsManager = FilterThumbnailsManager() val filterThumbnailsManager = FilterThumbnailsManager()
filterThumbnailsManager.clearThumbs() filterThumbnailsManager.clearThumbs()
@ -369,7 +370,14 @@ class EditActivity : SimpleActivity(), CropImageView.OnCropImageCompleteListener
val filterItems = filterThumbnailsManager.processThumbs() val filterItems = filterThumbnailsManager.processThumbs()
val adapter = FiltersAdapter(applicationContext, filterItems) { val adapter = FiltersAdapter(applicationContext, filterItems) {
applyFilter(it) val layoutManager = bottom_actions_filter_list.layoutManager as LinearLayoutManager
applyFilter(filterItems[it])
if (it == layoutManager.findLastCompletelyVisibleItemPosition() || it == layoutManager.findLastVisibleItemPosition()) {
bottom_actions_filter_list.smoothScrollBy(thumbnailSize, 0)
} else if (it == layoutManager.findFirstCompletelyVisibleItemPosition() || it == layoutManager.findFirstVisibleItemPosition()) {
bottom_actions_filter_list.smoothScrollBy(-thumbnailSize, 0)
}
} }
bottom_actions_filter_list.adapter = adapter bottom_actions_filter_list.adapter = adapter

View file

@ -12,7 +12,7 @@ import com.simplemobiletools.gallery.models.FilterItem
import kotlinx.android.synthetic.main.editor_filter_item.view.* import kotlinx.android.synthetic.main.editor_filter_item.view.*
import java.util.* import java.util.*
class FiltersAdapter(val context: Context, val filterItems: ArrayList<FilterItem>, val itemClick: (FilterItem) -> Unit) : RecyclerView.Adapter<FiltersAdapter.ViewHolder>(), class FiltersAdapter(val context: Context, val filterItems: ArrayList<FilterItem>, val itemClick: (Int) -> Unit) : RecyclerView.Adapter<FiltersAdapter.ViewHolder>(),
FilterAdapterListener { FilterAdapterListener {
private var currentSelection = filterItems.first() private var currentSelection = filterItems.first()
@ -31,11 +31,12 @@ class FiltersAdapter(val context: Context, val filterItems: ArrayList<FilterItem
override fun getCurrentFilter() = currentSelection override fun getCurrentFilter() = currentSelection
override fun setCurrentFilter(filterItem: FilterItem) { override fun setCurrentFilter(position: Int) {
val filterItem = filterItems.getOrNull(position) ?: return
if (currentSelection != filterItem) { if (currentSelection != filterItem) {
currentSelection = filterItem currentSelection = filterItem
notifyDataSetChanged() notifyDataSetChanged()
itemClick.invoke(filterItem) itemClick.invoke(position)
} }
} }
@ -51,7 +52,7 @@ class FiltersAdapter(val context: Context, val filterItems: ArrayList<FilterItem
} }
setOnClickListener { setOnClickListener {
filterAdapterListener.setCurrentFilter(filterItem) filterAdapterListener.setCurrentFilter(adapterPosition)
} }
} }
return itemView return itemView

View file

@ -5,5 +5,5 @@ import com.simplemobiletools.gallery.models.FilterItem
interface FilterAdapterListener { interface FilterAdapterListener {
fun getCurrentFilter(): FilterItem fun getCurrentFilter(): FilterItem
fun setCurrentFilter(filterItem: FilterItem) fun setCurrentFilter(position: Int)
} }

View file

@ -10,13 +10,13 @@
android:id="@+id/default_image_view" android:id="@+id/default_image_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginBottom="@dimen/bottom_filters_thumbnail_height"/> android:layout_marginBottom="@dimen/bottom_filters_thumbnail_size"/>
<com.theartofdev.edmodo.cropper.CropImageView <com.theartofdev.edmodo.cropper.CropImageView
android:id="@+id/crop_image_view" android:id="@+id/crop_image_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginBottom="@dimen/bottom_filters_thumbnail_height" android:layout_marginBottom="@dimen/bottom_filters_thumbnail_size"
android:visibility="gone" android:visibility="gone"
app:cropBackgroundColor="@color/crop_image_view_background" app:cropBackgroundColor="@color/crop_image_view_background"
app:cropInitialCropWindowPaddingRatio="0"/> app:cropInitialCropWindowPaddingRatio="0"/>

View file

@ -8,8 +8,8 @@
<ImageView <ImageView
android:id="@+id/editor_filter_item_thumbnail" android:id="@+id/editor_filter_item_thumbnail"
android:layout_width="@dimen/bottom_filters_thumbnail_height" android:layout_width="@dimen/bottom_filters_thumbnail_size"
android:layout_height="@dimen/bottom_filters_thumbnail_height" android:layout_height="@dimen/bottom_filters_thumbnail_size"
android:layout_above="@+id/editor_filter_item_label" android:layout_above="@+id/editor_filter_item_label"
android:background="@drawable/stroke_background" android:background="@drawable/stroke_background"
android:padding="1dp"/> android:padding="1dp"/>

View file

@ -11,6 +11,6 @@
<dimen name="instant_change_bar_width">30dp</dimen> <dimen name="instant_change_bar_width">30dp</dimen>
<dimen name="list_view_folder_thumbnail_size">72dp</dimen> <dimen name="list_view_folder_thumbnail_size">72dp</dimen>
<dimen name="bottom_actions_height">64dp</dimen> <dimen name="bottom_actions_height">64dp</dimen>
<dimen name="bottom_filters_thumbnail_height">76dp</dimen> <dimen name="bottom_filters_thumbnail_size">76dp</dimen>
<dimen name="bottom_filters_height">90dp</dimen> <dimen name="bottom_filters_height">90dp</dimen>
</resources> </resources>