title: Android - Swipe to dismiss RecyclerView with animation on the background
body: <p>As far as I understood, one possibility to implement swipe-to-dismiss for RecyclerView with a background below the swiped item (as in many google apps) is to implement a simple callback for the ItemTouchHelper and draw the background in the method onChildDraw.</p>
  
  <p>This is my implementation:</p>
  
  <pre><code>ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
      // create objects once and avoid allocating them in the onChildDraw method
      Drawable background;
      Drawable icon;
      int iconMargin;
      boolean initialized;
  
      private void init() {
          background = new ColorDrawable(Color.RED);
          icon = ContextCompat.getDrawable(mAppContext, R.drawable.ic_delete_white_24dp);
          iconMargin = (int) mAppContext.getResources().getDimension(R.dimen.fab_margin);
          initialized = true;
      }
  
      @Override
      public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
          return false;
      }
  
      @Override
      public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
          // remove swiped item from the list and notify the adapter
          int position = viewHolder.getAdapterPosition();
          mItemList.remove(position);
          mRecyclerViewAdapter.notifyDataSetChanged();
      }
  
      @Override
      public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
          if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
              if (dX &gt; 0) {
                  View itemView = viewHolder.itemView;
                  // if viewHolder has been swiped away, don't do anything
                  if (viewHolder.getAdapterPosition() == -1) {
                      return;
                  }
                  if (!initialized) {
                      init();
                  }
                  // draw background
                  int dXSwipe = (int) (dX * 1.05); // increase slightly dX to avoid view flickering, compensating loss of precision due to int conversion 
                  background.setBounds(itemView.getLeft(), itemView.getTop(),
                  itemView.getLeft() + dXSwipe, itemView.getBottom());
                  background.draw(c);
                  // draw icon
                  int top = (itemView.getTop() + itemView.getBottom() - icon.getIntrinsicHeight()) / 2;
                  int left = itemView.getLeft() + iconMargin;
                  icon.setBounds(left, top, left + icon.getIntrinsicWidth(), top + icon.getIntrinsicHeight());
                  icon.draw(c);
              }
          }
          super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
          }
      };
      ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
      itemTouchHelper.attachToRecyclerView(mRecyclerView);
  </code></pre>
  
  <p>Now, the question is how to animate the views in the background below. An  example of this animation can be taken from the google calendar: when events or reminders are swiped, the icon on the left is scaled up accordingly to the amount of the horizontal displacement.</p>
  
  <p>Has anybody idea how to achieve that? Would it be necessary a different approach, maybe with two views in the ViewHolder one on each other as proposed here <a href="https://stackoverflow.com/questions/32227482/recyclerview-swipe-with-a-view-below-it">RecyclerView Swipe with a view below it</a>? </p>