代码之家  ›  专栏  ›  技术社区  ›  Daniele

Android-RecyclerView刷卡动画不会消失

  •  0
  • Daniele  · 技术社区  · 6 年前

    我在recyclerView项上设置了一个滑动手势,以便对其进行编辑。我是这样做的:

    private val swipeHelper = 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 //get position which is swipe
    
                if (direction == ItemTouchHelper.RIGHT) {
                    … // do stuff
                }
            }
    
        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) {
                    val itemView = viewHolder.itemView
                    val height: Float = (itemView.bottom.toFloat() - itemView.top.toFloat())
                    val width = height / 3
    
                    if (dX > 0) {
                        paint.color = Color.parseColor("#FF9300")
                        val background = RectF(itemView.left.toFloat(), itemView.top.toFloat(), dX, itemView.bottom.toFloat())
                        c.drawRect(background, paint)
                        icon = BitmapFactory.decodeResource(resources, R.drawable.pencil)
                        val iconDest = RectF(
                                itemView.left.toFloat() + width,
                                itemView.top.toFloat() + width,
                                itemView.left.toFloat() + 2*width,
                                itemView.bottom.toFloat() - width)
                        c.drawBitmap(icon, null, iconDest, paint)
                    }
                }
                super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive)
            }
    
    }
    

    我面临的问题是,我不知道如何解决这个问题,因为我没有删除元素,所以在我完全重新启动活动之前,animatino不会重置。

    下面是一幅解释图:

    enter image description here

    有人处理过这个问题吗?你知道如何在不重启整个活动的情况下修复它吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Punit Sharma    6 年前

    呼叫 notifyItemChanged 在你的适配器上。这将重置适配器。

        2
  •  0
  •   mohammad reza sarsarabi    6 年前

    你可以在你的活动中通过打电话 notifyDatasetChanged(); notifyItemChanged(); :

        ItemTouchHelper.SimpleCallback callback = new RecyclerItemTouchHelper(this, 0, ItemTouchHelper.LEFT
                , new RecyclerItemTouchHelper.RecyclerItemTouchHelperListener() {
                @Override
                public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction, final int position) {
                if (direction == ItemTouchHelper.LEFT) {
                    // do what you want here and after that call the function below:
                    recyclerAdapter.notifyItemChanged(position);
                }
            }
        });
        new ItemTouchHelper(callback).attachToRecyclerView(recyclerView);