Open top menu



In this blog Explain how to Zoom View in android.


activiy_main.xml.

...................................................................................................................................................................
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout android:layout_width="match_parent"
       android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="16dp">

        <ImageButton
            android:id="@+id/thumb_button_1"
           android:layout_width="100dp"
            android:layout_height="75dp"
            android:layout_marginRight="1dp"
            android:src="@drawable/front"
            android:scaleType="centerCrop"
            android:contentDescription="@string/description_image_1"/>

        <ImageButton
            android:id="@+id/thumb_button_2"
            android:layout_width="100dp"
            android:layout_height="75dp"
            android:layout_marginRight="1dp"
            android:src="@drawable/back"
            android:scaleType="centerCrop"
            android:contentDescription="@string/description_image_1"/>

    </LinearLayout>

    <ImageView
        android:id="@+id/expanded_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="invisible"
        android:contentDescription="@string/description_zoom_touch_close" />

</FrameLayout>
...................................................................................................................................................................



MainActivity.java.
...................................................................................................................................................................

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.graphics.Point;
import android.graphics.Rect;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;



public class MainActivity extends AppCompatActivity {

    private Animator mCurrentAnimator;
    private int mShortAnimationDuration;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //  clicks on the views.
        final View thumb1View = findViewById(R.id.thumb_button_1);
        thumb1View.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
               zoomImageFromThumb(thumb1View, R.drawable.front);

            }

        });


        final View thumb1View1 = findViewById(R.id.thumb_button_2);
        thumb1View1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                zoomImageFromThumb(thumb1View1, R.drawable.back);

            }

        });


        // Retrieve and cache the system's default "short" animation time.

        mShortAnimationDuration = getResources().getInteger(
                android.R.integer.config_shortAnimTime);

    }

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

        if (mCurrentAnimator != null) {
            mCurrentAnimator.cancel();

        }

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

        expandedImageView.setImageResource(imageResId);

        //calculate
        final Rect startBounds = new Rect();
       final Rect finalBounds = new Rect();
        final Point globalOffset = new Point();

        // 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
        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;

        }

        thumbView.setAlpha(0f);
        expandedImageView.setVisibility(View.VISIBLE);



        // Set the pivot point for SCALE_X and SCALE_Y transformations
        expandedImageView.setPivotX(0f);
        expandedImageView.setPivotY(0f);


        // 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;



        // 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;

            }

        });

    }

}


...................................................................................................................................................................





Tagged

0 comments