List of usage examples for android.widget ImageView getGlobalVisibleRect
public final boolean getGlobalVisibleRect(Rect r)
From source file:Main.java
public static Rect getBitmapRectFromImageView(ImageView imageView) { Drawable drawable = imageView.getDrawable(); Bitmap bitmap = null;/*ww w .j av a2s .c om*/ if (drawable instanceof BitmapDrawable) { bitmap = ((BitmapDrawable) drawable).getBitmap(); } Rect rect = new Rect(); boolean isVisible = imageView.getGlobalVisibleRect(rect); if (!isVisible) { int[] location = new int[2]; imageView.getLocationOnScreen(location); rect.left = location[0]; rect.top = location[1]; rect.right = rect.left + imageView.getWidth(); rect.bottom = rect.top + imageView.getHeight(); } if (bitmap != null) { int bitmapWidth = bitmap.getWidth(); int bitmapHeight = bitmap.getHeight(); int imageViewWidth = imageView.getWidth() - imageView.getPaddingLeft() - imageView.getPaddingRight(); int imageviewHeight = imageView.getHeight() - imageView.getPaddingTop() - imageView.getPaddingBottom(); float startScale; if ((float) imageViewWidth / bitmapWidth > (float) imageviewHeight / bitmapHeight) { // Extend start bounds horizontally startScale = (float) imageviewHeight / bitmapHeight; } else { startScale = (float) imageViewWidth / bitmapWidth; } bitmapHeight = (int) (bitmapHeight * startScale); bitmapWidth = (int) (bitmapWidth * startScale); int deltaX = (imageViewWidth - bitmapWidth) / 2; int deltaY = (imageviewHeight - bitmapHeight) / 2; rect.set(rect.left + deltaX, rect.top + deltaY, rect.right - deltaX, rect.bottom - deltaY); return rect; } else { return null; } }
From source file:MainActivity.java
private void zoomFromThumbnail(final ImageView imageViewThumb) { if (mCurrentAnimator != null) { mCurrentAnimator.cancel();//from w w w . j ava 2 s . co m } final Rect startBounds = new Rect(); final Rect finalBounds = new Rect(); final Point globalOffset = new Point(); imageViewThumb.getGlobalVisibleRect(startBounds); findViewById(R.id.frameLayout).getGlobalVisibleRect(finalBounds, globalOffset); mImageViewExpanded .setImageBitmap(loadSampledResource(R.drawable.image, finalBounds.height(), finalBounds.width())); startBounds.offset(-globalOffset.x, -globalOffset.y); finalBounds.offset(-globalOffset.x, -globalOffset.y); float startScale; if ((float) finalBounds.width() / finalBounds.height() > (float) startBounds.width() / startBounds.height()) { startScale = (float) startBounds.height() / finalBounds.height(); float startWidth = startScale * finalBounds.width(); float deltaWidth = (startWidth - startBounds.width()) / 2; startBounds.left -= deltaWidth; startBounds.right += deltaWidth; } else { startScale = (float) startBounds.width() / finalBounds.width(); float startHeight = startScale * finalBounds.height(); float deltaHeight = (startHeight - startBounds.height()) / 2; startBounds.top -= deltaHeight; startBounds.bottom += deltaHeight; } imageViewThumb.setVisibility(View.GONE); mImageViewExpanded.setVisibility(View.VISIBLE); mImageViewExpanded.setPivotX(0f); mImageViewExpanded.setPivotY(0f); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.play(ObjectAnimator.ofFloat(mImageViewExpanded, View.X, startBounds.left, finalBounds.left)) .with(ObjectAnimator.ofFloat(mImageViewExpanded, View.Y, startBounds.top, finalBounds.top)) .with(ObjectAnimator.ofFloat(mImageViewExpanded, View.SCALE_X, startScale, 1f)) .with(ObjectAnimator.ofFloat(mImageViewExpanded, View.SCALE_Y, startScale, 1f)); animatorSet.setDuration(1000); animatorSet.setInterpolator(new AccelerateInterpolator()); animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mCurrentAnimator = null; } @Override public void onAnimationCancel(Animator animation) { mCurrentAnimator = null; } }); animatorSet.start(); mCurrentAnimator = animatorSet; }