示例#1
0
  @Override
  protected void dispatchDraw(Canvas canvas) {
    super.dispatchDraw(canvas);

    if (mFolder == null) return;
    if (mFolder.getItemCount() == 0 && !mAnimating) return;

    ArrayList<View> items = mFolder.getItemsInReadingOrder(false);
    Drawable d;
    TextView v;

    // Update our drawing parameters if necessary
    if (mAnimating) {
      computePreviewDrawingParams(mAnimParams.drawable);
    } else {
      v = (TextView) items.get(0);
      d = v.getCompoundDrawables()[1];
      computePreviewDrawingParams(d);
    }

    int nItemsInPreview = Math.min(items.size(), NUM_ITEMS_IN_PREVIEW);
    if (!mAnimating) {
      for (int i = nItemsInPreview - 1; i >= 0; i--) {
        v = (TextView) items.get(i);
        d = v.getCompoundDrawables()[1];

        mParams = computePreviewItemDrawingParams(i, mParams);
        mParams.drawable = d;
        drawPreviewItem(canvas, mParams);
      }
    } else {
      drawPreviewItem(canvas, mAnimParams);
    }
  }
示例#2
0
  private void animateFirstItem(final Drawable d, int duration) {
    computePreviewDrawingParams(d);
    final PreviewItemDrawingParams finalParams = computePreviewItemDrawingParams(0, null);

    final float scale0 = 1.0f;
    final float transX0 = (mAvailableSpaceInPreview - d.getIntrinsicWidth()) / 2;
    final float transY0 = (mAvailableSpaceInPreview - d.getIntrinsicHeight()) / 2;
    mAnimParams.drawable = d;

    ValueAnimator va = ValueAnimator.ofFloat(0f, 1.0f);
    va.addUpdateListener(
        new AnimatorUpdateListener() {
          public void onAnimationUpdate(ValueAnimator animation) {
            float progress = (Float) animation.getAnimatedValue();

            mAnimParams.transX = transX0 + progress * (finalParams.transX - transX0);
            mAnimParams.transY = transY0 + progress * (finalParams.transY - transY0);
            mAnimParams.scale = scale0 + progress * (finalParams.scale - scale0);
            invalidate();
          }
        });
    va.addListener(
        new AnimatorListenerAdapter() {
          @Override
          public void onAnimationStart(Animator animation) {
            mAnimating = true;
          }

          @Override
          public void onAnimationEnd(Animator animation) {
            mAnimating = false;
          }
        });
    va.setDuration(duration);
    va.start();
  }