Размер загруженного изображения изменяется - PullRequest
0 голосов
/ 25 августа 2011

Я загружаю изображение из Интернета, которое имеет следующие размеры: 128px x 128px. После загрузки изображение используется в качестве фона ImageButton, но когда отображается кнопка, изображение становится меньше, чем было раньше.это было загружено.Для загрузки я использую AsyncTask ... вот мой код:

public class ImageDownloaderButton extends AsyncTask<String, Void, Bitmap> {

    private String url;
    private final WeakReference<ImageButton> imageButtonReference;

    public ImageDownloaderButton(ImageButton imageButton) {
        imageButtonReference = new WeakReference<ImageButton>(imageButton);
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        url = params[0];
        try {
            if (url.equals("")) {
                return null;
            }
            return BitmapFactory.decodeStream(new URL(url).openStream());
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    protected void onPostExecute(Bitmap result) {
        if (isCancelled()) {
            result = null;
        }
        if (imageButtonReference != null) {
            ImageButton imageButton = imageButtonReference.get();
            if (imageButton != null) {
                if (result != null) {
                    imageButton.setImageBitmap(result);
                } else {
                    imageButton.setImageResource(R.drawable.noimageavailable);
                }
            }
        }
    }

    @Override
    protected void onPreExecute() {
        if (imageButtonReference != null) {
            ImageButton imageButton = imageButtonReference.get();
            if (imageButton != null) {
                imageButton.setImageResource(R.drawable.noimageavailable);
            }
        }
    }
}

CodeSnipet, где начинается загрузка:

ImageButton imageButton = (ImageButton) view.findViewById(R.id.icon_image);
ImageDownloaderButton downloader = new ImageDownloaderButton(imageButton);
downloader.execute(supp.getPicture()); //the picture is the url
imageButton.setOnClickListener(createOnClickListener(supp.getId()));

и, наконец, вот XML-файлкоторый содержит ImageButton:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/icon_with_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal">
<ImageButton
    android:id="@+id/icon_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:layout_gravity="center"
    android:onClick="myClickHandler"/>
<TextView
    android:id="@+id/icon_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:textColorHighlight="#656565"/>
</LinearLayout>

Может кто-нибудь объяснить мне, почему размер изображения изменяется? Изображение (noavailableimage), которое отображается во время загрузки AsyncTask, имеет размер 128x128px, и этоодин показан в правильном размере.

Снимки экрана:

aphotheke baecker

Эмулятор:

mainmenu supplier

Ответы [ 3 ]

1 голос
/ 25 августа 2011

Попробуйте, прежде чем устанавливать растровое изображение:

imageButton.setScaleType(ImageView.ScaleType.CENTER);
1 голос
/ 26 августа 2011

У меня была эта проблема раньше, вместо того, чтобы использовать метод декодирования BitmapFactories - попробуйте использовать класс Drawable, например

URL url = new URL("some address");
URLConnection connection = url.openConnection();
Drawable d = Drawable.createFromStream(connection.getInputStream(),"src");

Надеюсь, это поможет!

0 голосов
/ 25 августа 2011

Если вы заранее знаете, что размер изображения, которое вы собираетесь установить, составляет 128x128, то установите layout_width и layout_height для ImageView на 128px.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...