Die Lösung für das Problem, dass die Anpassung und Größenänderung von Picasso 2.5.2 keine Bilder in Android 5.1 laden kann

Verwenden Sie „Transformation“ anstelle von „Anpassen und Größe ändern“.

Zu Beginn habe ich den folgenden Code zum Laden des Bildes verwendet, stellte jedoch fest, dass das Bild nicht angezeigt werden konnte.

Picasso.with(context)
                    .load(new File(data.content))
                    .placeholder(R.drawable.default_publishlist)
                    .fit()
                    .centerInside()
                    .into(binding.ivContent);

Später, als die Methoden fit und centerInside entfernt wurden, konnte das Bild geladen werden, aber der Speicherverbrauch war sehr groß, sodass offensichtlich immer noch ein Problem bestand. Nach der Erkundung stellte ich fest, dass Picasso über eine Transformationsschnittstelle verfügt, mit der die Bildkonvertierung angepasst werden kann. Daher habe ich die folgende Verarbeitungsmethode entwickelt:

Picasso.with(context)
                    .load(new File(data.content))
                    .placeholder(R.drawable.default_publishlist)
                    .transform(getTransformation(binding.ivContent))
                    .into(binding.ivContent);
private static Transformation getTransformation(final ImageView view) {
        return new Transformation() {
            @Override
            public Bitmap transform(Bitmap source) {
                int targetWidth = view.getWidth();

                //返回原图
                if (source.getWidth() == 0 || source.getWidth() < targetWidth) {
                    return source;
                }

                //如果图片大小大于等于设置的宽度,则按照设置的宽度比例来缩放
                double aspectRatio = (double) source.getHeight() / (double) source.getWidth();
                int targetHeight = (int) (targetWidth * aspectRatio);
                if (targetHeight == 0 || targetWidth == 0) {
                    return source;
                }
                Bitmap result = Bitmap.createScaledBitmap(source, targetWidth, targetHeight, false);
                if (result != source) {
                    // Same bitmap is returned if sizes are the same
                    source.recycle();
                }
                return result;
            }

            @Override
            public String key() {
                return "transformation" + " desiredWidth";
            }
        };
    }

Durch Berechnen der Größe des geladenen Bildes basierend auf der Breite und Höhe von ImageView kann der belegte Speicher erheblich eingespart und OOM vermieden werden.

Acho que você gosta

Origin blog.csdn.net/chenxiabinffff/article/details/55101852
Recomendado
Clasificación