Как сделать смахивание, чтобы удалить и проведите к архиву в двух цветах в Recyclerview Android - PullRequest
0 голосов
/ 24 апреля 2018

Прямо сейчас у меня есть функциональная прокрутка влево, которую нужно удалить, в программе повторного просмотра с двумя макетами (передний план и фон). Я использую itemtouchhelper в коде. Тем не менее, я бы хотел, чтобы ОБА ударяли влево и вправо, показывая разные цвета и значки, как в Google Inbox. Как я могу это реализовать?

То, что я хочу, это: проведите пальцем вправо проведите пальцем влево

что у меня есть: только проведите пальцем вправо

код - это просто стандартный itemtouchhelper.simplecallback с двумя макетами в xml. И я гуглил везде и нашел только один вариант смахивания с одним значком и одним цветом

1 Ответ

0 голосов
/ 24 апреля 2018

Использование ItemTouchHelper для реализации функции, подобной Gmail

вызовите следующую функцию после установки recyclerView

private fun initSwipe() {
        val simpleItemTouchCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT) {

            override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
                return false
            }

            override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
                val position = viewHolder.adapterPosition

                if (direction == ItemTouchHelper.LEFT) {

                   //Logic to do when swipe left

                } else {

                  //Logic to do when swipe right

                }
            }

            override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) {


                val icon: Bitmap
                if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {


       //Drawing for Swife Right    

                    val itemView = viewHolder.itemView
                    val height = itemView.bottom.toFloat() - itemView.top.toFloat()
                    val width = height / 3
                    if (dX > 0) {
                        p.color = Color.parseColor("#2F2FD3")
                        val background = RectF(itemView.left.toFloat(), itemView.top.toFloat(), dX, itemView.bottom.toFloat())
                        c.drawRect(background, p)
                        icon = BitmapFactory.decodeResource(resources, R.drawable.ic_archive)
                        val icon_dest = RectF(itemView.left.toFloat() + width, itemView.top.toFloat() + width, itemView.left.toFloat() + 2 * width, itemView.bottom.toFloat() - width)
                        c.drawBitmap(icon, null, icon_dest, p)
                    } else {

       //Drawing for Swife Left


                        p.color = Color.parseColor("#D32F2F")
                        val background = RectF(itemView.right.toFloat() + dX, itemView.top.toFloat(), itemView.right.toFloat(), itemView.bottom.toFloat())
                        c.drawRect(background, p)
                        icon = BitmapFactory.decodeResource(resources, R.drawable.ic_delete)
                        val icon_dest = RectF(itemView.right.toFloat() - 2 * width, itemView.top.toFloat() + width, itemView.right.toFloat() - width, itemView.bottom.toFloat() - width)
                        c.drawBitmap(icon, null, icon_dest, p)
                    }
                }
                super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
            }
        }
        val itemTouchHelper = ItemTouchHelper(simpleItemTouchCallback)
        itemTouchHelper.attachToRecyclerView(YOUR_RECYCLER_VIEW)
    }

Где Object p является объектом рисования Paint p = new Paint() Надеюсь, это поможет вам.

...