void preProcess() {
   for (MockViewHolder vh : mViewHolders) {
     final int ind = mTestAdapter.mItems.indexOf(vh.mItem);
     assertEquals(
         "actual adapter position should match",
         ind,
         mAdapterHelper.applyPendingUpdatesToPosition(vh.mPosition));
   }
   mAdapterHelper.preProcess();
   for (int i = 0; i < mPreProcessClone.mItems.size(); i++) {
     TestAdapter.Item item = mPreProcessClone.mItems.get(i);
     final int preLayoutIndex = mPreLayoutItems.indexOf(item);
     final int endIndex = mTestAdapter.mItems.indexOf(item);
     if (preLayoutIndex != -1) {
       assertEquals(
           "find position offset should work properly for existing elements"
               + i
               + " at pre layout position "
               + preLayoutIndex
               + " and post layout position "
               + endIndex,
           endIndex,
           mAdapterHelper.findPositionOffset(preLayoutIndex));
     }
   }
   // make sure visible view holders still have continuous positions
   final StringBuilder vhLogBuilder = new StringBuilder();
   for (ViewHolder vh : mViewHolders) {
     vhLogBuilder.append("\n").append(vh.toString());
   }
   if (mViewHolders.size() > 0) {
     final String vhLog = vhLogBuilder.toString();
     final int start = mViewHolders.get(0).getLayoutPosition();
     for (int i = 1; i < mViewHolders.size(); i++) {
       assertEquals(
           "view holder positions should be continious in pre-layout" + vhLog,
           start + i,
           mViewHolders.get(i).getLayoutPosition());
     }
   }
   mAdapterHelper.consumePostponedUpdates();
   // now assert these two adapters have identical data.
   mPreProcessClone.applyOps(mFirstPassUpdates, mTestAdapter);
   mPreProcessClone.applyOps(mSecondPassUpdates, mTestAdapter);
   assertAdaptersEqual(mTestAdapter, mPreProcessClone);
 }
コード例 #2
0
  private void animateAddImpl(final ViewHolder holder) {
    final View view = holder.itemView;
    final ViewPropertyAnimatorCompat animation = ViewCompat.animate(view);
    mAddAnimations.add(holder);
    float startX, startY;

    int position = (int) view.getTag();

    if (position % 2 == 0) {
      startY = -100;
      startX = -width;
    } else {
      startY = 100;
      startX = width;
    }
    Log.d("test", String.valueOf(holder.getLayoutPosition()));
    ViewCompat.setTranslationX(view, startX);
    // 应该是相对偏移
    ViewCompat.setTranslationY(view, startY);
    ViewCompat.setAlpha(view, 0);
    animation.setInterpolator(new OvershootInterpolator());
    animation
        .alpha(1)
        .translationX(0)
        .translationY(0)
        .setDuration(getAddDuration())
        .setListener(
            new VpaListenerAdapter() {
              @Override
              public void onAnimationStart(View view) {
                dispatchAddStarting(holder);
              }

              @Override
              public void onAnimationCancel(View view) {
                ViewCompat.setAlpha(view, 1);
              }

              @Override
              public void onAnimationEnd(View view) {
                animation.setListener(null);
                dispatchAddFinished(holder);
                mAddAnimations.remove(holder);
                dispatchFinishedWhenDone();
                // 使用这个来复原
                ViewCompat.setTranslationY(view, 0);
              }
            })
        .start();
  }
コード例 #3
0
 public static boolean isRemoved(ViewHolder holder) {
   return holder.isRemoved();
 }