Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ImageView android:cropToPadding, what it actually does?

I went through the documentation for the tag android:cropToPadding here, it only says:

If true, the image will be cropped to fit within its padding.

May be a boolean value, such as "true" or "false".

which is quite confusing for me to understand.

I have an ImageView inside my app, (which was developed by someone else):

<ImageView
      android:layout_width="125dp"
      android:layout_height="125dp"
      android:layout_gravity="center"
      android:maxWidth="100dp"
      android:padding="20dp" />

This ImageView had cropToPadding tag inside it, there were like 20 ImageView on main screen, which all had this tag inside them, and the app was obviously taking time to load as there were more Images, but then removing images was not an option, so I was finding stuff that was useless and trying to optimize the layout when I came across this tag.

Removing this tag did no change to the images that were shown inside the ImageView, but there must be some reason that every image contained this tag. So I started finding what this tag did, and documentation wasn't much clear as to why this tag should be used.

Can someone please explain what this tag does to the Image? I found out not many resources, all that I found was "This crops the Image to padding", what does that mean! I know what padding is, I know what cropping is, but what does "Sets whether this ImageView will crop to padding" mean?

like image 358
Vedprakash Wagh Avatar asked Jun 12 '19 18:06

Vedprakash Wagh


People also ask

What is the use of ImageView in android?

Displays image resources, for example Bitmap or Drawable resources. ImageView is also commonly used to apply tints to an image and handle image scaling.

What is the use of ImageView?

ImageView class is used to display any kind of image resource in the android application either it can be android. graphics. Bitmap or android.

What is adjust view bounds in android?

android:adjustViewBounds—If set to true, the attribute adjusts the bounds of the ImageView control to maintain the aspect ratio of the image displayed through it. android:resizeMode—The resizeMode attribute is used to make a control resizable so we can resize it horizontally, vertically, or around both axes.


Video Answer


1 Answers

This is a complex question to answer, because we have to drill into some nitty-gritty details of how ImageView actually draws the image to the screen.

The first thing to establish is that there are two rectangles that affect ImageView drawing behavior. The first is the rectangle defined by the ImageView's dimensions ignoring padding. The second is the rectangle defined by the ImageView's dimensions considering padding. (Obviously, if padding is 0, then these will be the same.)

The next thing to establish is that ImageViews all have a scale type that defines how the image is stretched and/or cropped when the image's intrinsic size doesn't match the size of the rectangle that it is being drawn into.

The default scale type is FIT_CENTER, which scales the image down to fit within the view bounds + padding (that is, the image will be drawn inside the rectangle that considers padding). Since the image is being drawn inside the padding rectangle, android:cropToPadding has no effect.

However, other scale types work differently. The scale type CENTER simply positions the image in the middle of the view, but performs no scaling (so the image will be clipped if it is bigger than the view). In this case, android:cropToPadding defines whether the image will be clipped by only the view's bounds or also clipped by the view's padding.

A picture is worth a thousand words:

enter image description here

This picture shows the same 72x72 image inside a 72x72 view with 16dp padding and CENTER scale type. The left ImageView has android:cropToPadding="false" and the right ImageView has android:cropToPadding="true".

like image 156
Ben P. Avatar answered Oct 23 '22 22:10

Ben P.