Charlie-Blake
Charlie-Blake

Reputation: 11050

ImageView autoresizing when getting a downloaded drawable

I'm getting my downloaded drawables correctly and they show up correctly. I just want to show the top 144x284dip of the image on my ImageView. Instead, when the images are downloaded the ImageView resizes itself to the width and height of the drawable. I've tried modifying both layoutparams and minimumwidth / minimumheight, to no avail.

Is there anything I can do to force the ImageView to stay at 144x284?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="284dip"
    android:layout_height="144dip" >

    <ImageView
        android:id="@+id/imageViewLogo"
        android:layout_width="284dip"
        android:layout_height="144dip" />

</LinearLayout>

Upvotes: 0

Views: 275

Answers (2)

RajV
RajV

Reputation: 7170

If I understand you correctly, you want to do two things:

  1. Fix the size of the ImageView to 284dip X 144dip.
  2. Show only the top left portion of the image, unscaled.

Doing the second part will require you to use "matrix" scale type and set scale to 1.0 and transform factor to 0.0.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="284dip"
        android:layout_height="144dip"
        android:scaleType="matrix"
        android:src="@drawable/ic_launcher" />
</LinearLayout>

By default, scale factor is 1 and translation is 0. So, you don't have to do anything else. If you do wish a different scaling and translation, you could write code like this.

void showImage(Bitmap bm) {
    float scaleFactor = ...;
    float transform = ...;

    imageView.setImageBitmap(bm);
    final Matrix matrix = new Matrix();
    matrix.setScale(scaleFactor, scaleFactor);
    matrix.setTranslate(transform, transform);
    imageView.setImageMatrix(matrix);
}

Upvotes: 1

Charlie-Blake
Charlie-Blake

Reputation: 11050

Ok, I solved it.

I just did this:

Bitmap newBitmap = Bitmap.createBitmap(bm, 0, 0, 144, 284);

Then set it to the ImageView.

Upvotes: 1

Related Questions