entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

ImageView no me está mostrando la imagen con su tamaño

En mi aplicación estoy mostrando en un Fragment un ListView personalizado en el que se muestran 2 imágenes y un texto.

El problema viene que las imágenes se muestran más pequeñas de lo que está en su layout, es decir, tienen un tamaño por defecto de 78dip y las muestra mucho más pequeñas.

En el Fragment tengo lo siguiente:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.activity_calendario, container, false);
        listCalendario = (ListView) rootView.findViewById(R.id.listadoViewPartidos);
        StrictMode.enableDefaults();
        new LoadBackgroudData().execute();
        return rootView;
    }

En LoadBackgroundData, creo el setAdapter, y en mi adaptador tengo lo siguiente:

public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ListViewItem item = items.get(position);

        View vi = convertView;

        if (convertView == null)
            vi = inflater.inflate(R.layout.item_row_calendario, null);

        ImageView imgThumbnail = (ImageView) vi.findViewById(R.id.imgThumbnail);
        TextView txtTitle = (TextView) vi.findViewById(R.id.txtTitle);
        ImageView imgThumbnail2 = (ImageView) vi
                .findViewById(R.id.imgThumbnail2);

        new getImageUrl(imgThumbnail).execute(item.ThumbnailResource);
        txtTitle.setText(item.Title);
        new getImageUrl(imgThumbnail2).execute(item.ThumbnailResource2);

        return vi;
    }

La clase getImageUrl es la siguiente:

private HashMap<String, Bitmap> imagesCache = new HashMap<String, Bitmap>();

    private class getImageUrl extends AsyncTask<String, Void, Bitmap> {

        private final WeakReference<ImageView> imageViewReference;

        public getImageUrl(ImageView image) {
            imageViewReference = new WeakReference<ImageView>(image);
        }

        @Override
        protected Bitmap doInBackground(String... urls) {
            String url = urls[0];
            Bitmap bitmap = null;

            if (imagesCache.containsKey(url)) {
                return imagesCache.get(url);
            }

            try {
                InputStream in = new java.net.URL(url).openStream();
                bitmap = BitmapFactory.decodeStream(in);
                imagesCache.put(url, bitmap);
            } catch (Exception e) {
                //Log.e("Error", e.getMessage());
            }

            return bitmap;
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            imageViewReference.get().setImageBitmap(bitmap);
        }
    }

¿A qué puede ser debido que no me esté mostrando correctamente el tamaño de las imágenes? Este problema lo estoy teniendo desde que uso Fragments, en un Activity normal funcionaba correctamente.
Espero que me podáis ayudar, saludos!

0voto

x4mp73r comentado

Por lo que veo la imagen la obtienes de un servidor o algún sitio,¿Ya intentaste cambiar el tamaño de tu ImageView contenedor en tu Layout?

Yo eh usado getImageUri de esta manera:
Esto lo coloqué en una clase

public class Helpers {

    public static Bitmap get_ImageBitmap(String url) {

        Bitmap bm = null;
        try {
            URL url_add = new URL(url);
            URLConnection conn = url_add.openConnection();
            conn.connect();
            InputStream is = conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);
            bm = BitmapFactory.decodeStream(bis);
            bis.close();
            is.close();

        } catch (IOException e) {

        }
        return bm;
    }
}

En mi caso, usé JSON para obtener los datos como nombre, apellido, etc y también obtenía una imagen,esto lo recibía en un Hashmap, a lo cual, en mi Adapter de mi ListView usé algo como esto:

  HashMap usuarios = getItem(position);
        LayoutInflater inflater = (LayoutInflater) this.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View rowView = inflater.inflate(R.layout.list_item_promo, parent, false);

        promoItemTextTextView = (TextView) rowView.findViewById(R.id.promoItemTextTextView);
        promoItemTextTextView.setText((String) usuarios.get("nombre"));
        descriptionItem = (TextView) rowView.findViewById(R.id.descriptionItem);
        descriptionItem.setText((String) usuarios.get("apellido"));
        expire = (TextView) rowView.findViewById(R.id.expire);
        expire.setText((String) usuarios.get("vencimiento"));

/*  Aquí es donde coloco la imagen que descargué en la clase Helpers  */
        imageItemPromo = (ImageView) rowView.findViewById(R.id.imageItemPromo);
        Bitmap get_image = Helpers.get_ImageBitmap((String) usuarios.get("image_url"));
        imageItemPromo.setImageBitmap(get_image);

Esto no me causó problemas en cuanto a las dimensiones de las imágenes ya que me mostraba tal cual era el tamañop original.
Se que no es lo que preguntas pero lo coloco por si te llega a servir

0voto

danielreales7 comentado

Yo pienso que lo que estoy utilizando está bien, porque en una actividad normal me funciona correctamente. El problema seguramente estará que al hacerlo en un Fragment, cargará antes las imágenes que el Layout, o no sé exactamente que pasará, pero no consigo dar con el problema.

1 Respuesta

1voto

danielreales7 Puntos5150

Al final fue problemas del layout, en las imágenes tenía scaleType como CenterInside y lo cambié por CenterCrop y funcionó correctamente.

Espero que sirva de ayuda.

0voto

Peter comentado

Gracias por compartir la solución!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta