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,492
  • 2
  • 29
  • 59
Azam Rahimjonov
  • 108
  • 1
  • 9

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,975
  • 1
  • 20
  • 35
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
  • 27,060
  • 21
  • 118
  • 148
  • Thank you, but I am afraid you misunderstood me, because I want to change background opacity not the image's – Azam Rahimjonov Jul 05 '16 at 11:00
  • What is the background? – Zoe Jul 05 '16 at 11:01
  • It is just a black to hide other parts of screen except expanded image, firstly it should be transparent, and after clicking an image, alpha level should increase sequentially, until image is full screen. then whole background(except image) will be black (like telegram I think) – Azam Rahimjonov Jul 05 '16 at 11:05
  • Updated the answer – Zoe Jul 05 '16 at 11:07
  • Sorry, why are you drawing rectangular – Azam Rahimjonov Jul 05 '16 at 11:08
  • Look, I am trying my best with absolutly no code what so ever. If you want a better answer than this and what Aman Jain and Tony have written, post some code showing **what you have** – Zoe Jul 05 '16 at 11:11
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,676
  • 1
  • 14
  • 37
  • 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