Exemple #1
0
  private PreviewItemDrawingParams computePreviewItemDrawingParams(
      int index, PreviewItemDrawingParams params) {
    index = NUM_ITEMS_IN_PREVIEW - index - 1;
    float r = (index * 1.0f) / (NUM_ITEMS_IN_PREVIEW - 1);
    float scale = (1 - PERSPECTIVE_SCALE_FACTOR * (1 - r));

    float offset = (1 - r) * mMaxPerspectiveShift;
    float scaledSize = scale * mBaselineIconSize;
    float scaleOffsetCorrection = (1 - scale) * mBaselineIconSize;

    // We want to imagine our coordinates from the bottom left, growing up and to the
    // right. This is natural for the x-axis, but for the y-axis, we have to invert things.
    float transY = mAvailableSpaceInPreview - (offset + scaledSize + scaleOffsetCorrection);
    float transX = offset + scaleOffsetCorrection;
    float totalScale = mBaselineIconScale * scale;
    final int overlayAlpha = (int) (80 * (1 - r));

    if (params == null) {
      params = new PreviewItemDrawingParams(transX, transY, totalScale, overlayAlpha);
    } else {
      params.transX = transX;
      params.transY = transY;
      params.scale = totalScale;
      params.overlayAlpha = overlayAlpha;
    }
    return params;
  }
Exemple #2
0
  private float getLocalCenterForIndex(int index, int[] center) {
    mParams = computePreviewItemDrawingParams(Math.min(NUM_ITEMS_IN_PREVIEW, index), mParams);

    mParams.transX += mPreviewOffsetX;
    mParams.transY += mPreviewOffsetY;
    float offsetX = mParams.transX + (mParams.scale * mIntrinsicIconSize) / 2;
    float offsetY = mParams.transY + (mParams.scale * mIntrinsicIconSize) / 2;

    center[0] = Math.round(offsetX);
    center[1] = Math.round(offsetY);
    return mParams.scale;
  }
Exemple #3
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);
    }
  }
Exemple #4
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();
  }