1
private void zoomImageFromThumb(final View thumbView, int imageResId){

    // If there's an animation in progress, cancel it
    // immediately and proceed with this one.
    if (mCurrentAnimator != null) {
        mCurrentAnimator.cancel();
    }
    Drawable expanded_image_background=getResources().getDrawable(R.drawable.background_expanded_image);



    // Load the high-resolution "zoomed-in" image.
    final ImageView expandedImageView = (ImageView) findViewById(R.id.expanded_image);
    expandedImageView.setImageResource(imageResId);
    expandedImageView.bringToFront();

    // Calculate the starting and ending bounds for the zoomed-in image.
    // This step involves lots of math. Yay, math.
    final Rect startBounds = new Rect();
    final Rect finalBounds = new Rect();
    final Point globalOffset = new Point();

    // The start bounds are the global visible rectangle of the thumbnail,
    // and the final bounds are the global visible rectangle of the container
    // view. Also set the container view's offset as the origin for the
    // bounds, since that's the origin for the positioning animation
    // properties (X, Y).
    thumbView.getGlobalVisibleRect(startBounds);
    findViewById(R.id.container).getGlobalVisibleRect(finalBounds, globalOffset);
    startBounds.offset(-globalOffset.x, -globalOffset.y);
    finalBounds.offset(-globalOffset.x, -globalOffset.y);

    // Adjust the start bounds to be the same aspect ratio as the final
    // bounds using the "center crop" technique. This prevents undesirable
    // stretching during the animation. Also calculate the start scaling
    // factor (the end scaling factor is always 1.0).
    float startScale;
    if ((float) finalBounds.width() / finalBounds.height()
            > (float) startBounds.width() / startBounds.height()) {
        // Extend start bounds horizontally
        startScale = (float) startBounds.height() / finalBounds.height();
        float startWidth = startScale * finalBounds.width();
        float deltaWidth = (startWidth - startBounds.width()) / 2;
        startBounds.left -= deltaWidth;
        startBounds.right += deltaWidth;
    } else {
        // Extend start bounds vertically
        startScale = (float) startBounds.width() / finalBounds.width();
        float startHeight = startScale * finalBounds.height();
        float deltaHeight = (startHeight - startBounds.height()) / 2;
        startBounds.top -= deltaHeight;
        startBounds.bottom += deltaHeight;
    }

    // Hide the thumbnail and show the zoomed-in view. When the animation
    // begins, it will position the zoomed-in view in the place of the
    // thumbnail.
    thumbView.setAlpha(0f);
    expandedImageView.setVisibility(View.VISIBLE);

    // Set the pivot point for SCALE_X and SCALE_Y transformations
    // to the top-left corner of the zoomed-in view (the default
    // is the center of the view).
    expandedImageView.setPivotX(0f);
    expandedImageView.setPivotY(0f);

    // Construct and run the parallel animation of the four translation and
    // scale properties (X, Y, SCALE_X, and SCALE_Y).
    AnimatorSet set = new AnimatorSet();
    set.play(ObjectAnimator.ofFloat(expandedImageView, View.X, startBounds.left, finalBounds.left))
            .with(ObjectAnimator.ofFloat(expandedImageView, View.Y, startBounds.top, finalBounds.top))
            .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_X,
                    startScale, 1f)).with(ObjectAnimator.ofFloat(expandedImageView,
            View.SCALE_Y, startScale, 1f));
    set.setDuration(mShortAnimationDuration);
    set.setInterpolator(new DecelerateInterpolator());
    set.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            mCurrentAnimator = null;
        }

        @Override
        public void onAnimationCancel(Animator animation) {
            mCurrentAnimator = null;
        }
    });
    set.start();
    mCurrentAnimator = set;

    // Upon clicking the zoomed-in image, it should zoom back down
    // to the original bounds and show the thumbnail instead of
    // the expanded image.
    final float startScaleFinal = startScale;
    expandedImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (mCurrentAnimator != null) {
                mCurrentAnimator.cancel();
            }

            // Animate the four positioning/sizing properties in parallel,
            // back to their original values.
            AnimatorSet set = new AnimatorSet();
            set.play(ObjectAnimator
                    .ofFloat(expandedImageView, View.X, startBounds.left))
                    .with(ObjectAnimator
                            .ofFloat(expandedImageView,
                                    View.Y,startBounds.top))
                    .with(ObjectAnimator
                            .ofFloat(expandedImageView,
                                    View.SCALE_X, startScaleFinal))
                    .with(ObjectAnimator
                            .ofFloat(expandedImageView,
                                    View.SCALE_Y, startScaleFinal));
            set.setDuration(mShortAnimationDuration);
            set.setInterpolator(new DecelerateInterpolator());
            set.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    thumbView.setAlpha(1f);
                    expandedImageView.setVisibility(View.GONE);
                    mCurrentAnimator = null;
                }

                @Override
                public void onAnimationCancel(Animator animation) {
                    thumbView.setAlpha(1f);
                    expandedImageView.setVisibility(View.GONE);
                    mCurrentAnimator = null;
                }
            });
            set.start();
            mCurrentAnimator = set;
        }
    });
}

currently I am working on animations, and I have an image on imageview and if I click it, it is zoomed out (filled in screen), next it is zoomed in.

I used this function to create an animation. But I also have background(drawable folder) of imageview and I want it to increase (and decrease) its opacity while zoomed out and in. I know that I have to use setAlpha(), but I cannot figure out where to put it. Please help...

Janki Gadhiya
  • 4,522
  • 2
  • 26
  • 59

3 Answers3

2

You need to create two background drawable, one with full opacity and other with 0 opacity then you can use this code to animate from one drawable to another.

I have created a drawable array containing two drawable.

Drawable[] drawables = {ContextCompat.getDrawable(mActivity, R.drawable.firstBackgroundDrawable),ContextCompat.getDrawable(mActivity, R.drawable.secndBackgroundDrawable)};
TransitionDrawable trans = new TransitionDrawable(drawables);
imageID.setBackground(trans); 
trans.setCrossFadeEnabled(true);
trans.startTransition(5000);

In startTransition(duration) you can set the animation duration.

Aman Jain
  • 2,893
  • 1
  • 18
  • 33
1

If it is drawn as a bitmap you can do this:

Paint alphaPaint = new Paint();
alphaPaint.setAlpha(ALPHA);
canvas.drawBitmap(bitmap, x, y, alphaPaint);

For the controlling of the Alpha that is up to you

EDIT:

Based on what you told me:

Paint alphaPaint = new Paint();
alphaPaint.setAlpha(ALPHA);
alphaPaint.setColor(Color.BLACK);
canvas.drawRect(rect, alphaPaint);
Zoe stands with Ukraine
  • 25,310
  • 18
  • 114
  • 149
1

your_image_name.animate().setDuration(300).alpha(0f);

your_image_name= ImageView, could be anything! (Text/Button/Layout)

alpha(0f) = f means float (0 = 0%, 1 = 100%)

alpha(0.5f) = 50% alpha

If you want to change the alpha on the same time as you zoom in/out, then do it the time you start the animation of zoom!

Antonios Tsimourtos
  • 1,626
  • 1
  • 11
  • 34
  • Thank you, but I think it changes the image's alpha level not the background of image. I need to change background alpha level while image is zooming out and in – Azam Rahimjonov Jul 05 '16 at 11:07