PaulG
PaulG

Reputation: 7102

How do I prevent scaling in Android Imageview?

I have an image that is 480 pixels by 40 pixels. I would like to show this image in an ImageView without having it scale to fit.

Ex: If my screen is only 320pixels wide I would like only 320pixels of the image to show on the screen, not have it cram itself into the ImageView (even if it means that the rest of the image gets cut off).

Is there a way to prevent it from scaling to fit?

EDIT: Also, I would like the left side of the image to line up with the left side of the device's screen.

Thanks

Upvotes: 15

Views: 26707

Answers (6)

Samuel
Samuel

Reputation: 429

My Problem was that I set the Scaletype in the xml-layout-file, through I set the picture manually in Java-Code.
The Solution was to set the scale-type in Java-Code instead the XML-file.

Here is what has worked for me:

// set image
backgroundImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

Upvotes: 0

Jakub S.
Jakub S.

Reputation: 6080

If

android:scaleType="center"

doesn't work, check how do you set your image. You have to use android:src, not android:backgorund

so

 android:scaleType="center"
 android:src="@drawable/yourDrawable"

Upvotes: 1

Kai Wang
Kai Wang

Reputation: 3361

Try this one:

                    android:adjustViewBounds="true"
                    android:scaleType="centerCrop"

Upvotes: 3

birdman
birdman

Reputation: 1144

I had a similar issue where I had a fixed size graphic that I wanted to scale to the screen but stay in proportion it was 480 x 200.

I used Fill_parent on the height so it would scale and wrap_content on the width. As well as Align Parent Left and Align Parent Top.

In your case you could just use wrap_content on both as well as Align Parent Left. Then I tweeked the width using Right Margin 180dp on normal screens to be sure it maintained the width.

<ImageView
    android:id="@+id/imageLayer"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginRight="180dp"
    tools:ignore="ContentDescription" />

Upvotes: 0

Renate
Renate

Reputation: 811

Use the MATRIX scaletype to set it for no scaling and no centering

It will use the identity matrix unless you set it using setImageMatrix(matrix);

android:scaleType="matrix"

Or in Java:

view.setScaleType(ImageView.ScaleType.MATRIX);

Upvotes: 16

nhaarman
nhaarman

Reputation: 100358

Use ScaleType.CENTER, like this in XML:

android:scaleType="center"

This will "center the image in the view, but perform no scaling"

Read more here: http://developer.android.com/reference/android/widget/ImageView.ScaleType.html

(This is by the way the first hit on googling "imageview scale")

Upvotes: 30

Related Questions