使用 Picasso 在 ImageView 中不显示大图像

Large Image Not Showing in ImageView using Picasso

这是我的Image

我想用 ScrollView

显示 ImageView

代码:

  Picasso.get().load(img_url2)
            .fit().centerInside()
            .into(imageView2);

XML:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#dddddd">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/img2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="vertical"/>

    </LinearLayout>
</ScrollView>

创建自定义图像视图以显示比例。

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;

public class ProportionalImageView extends androidx.appcompat.widget.AppCompatImageView {
 
    public ProportionalImageView(Context context) {
        super(context);
    }
 
    public ProportionalImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    public ProportionalImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
 
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        Drawable d = getDrawable();
        if (d != null) {
            int w = MeasureSpec.getSize(widthMeasureSpec);
            int h = w * d.getIntrinsicHeight() / d.getIntrinsicWidth();
            setMeasuredDimension(w, h);
        }
        else super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

按如下方式使用此 ImageView

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toBottomOf="@id/actionBar">

            <com.dukaan.customviews.ProportionalImageView
                android:id="@+id/ivBanner"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                app:layout_constraintTop_toBottomOf="@id/actionBar" />
        </ScrollView>

然后像往常一样使用 Glide 或 Picasso 设置图像后。

我更喜欢像下面这样设置

Glide.with(context)
            .load(url.equals("") ? R.drawable.task_info_image : url)
            .addListener(new RequestListener<Drawable>() {
                @Override
                public boolean onLoadFailed(@Nullable GlideException e, 
                   Object model, Target<Drawable> target, boolean 
                      isFirstResource) {
                         dataBinding.progress.setVisibility(View.GONE);
                         return false;
                }

                @Override
                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                    dataBinding.progress.setVisibility(View.GONE);
                    dataBinding.ivBanner.setImageDrawable(resource);
                    return false;
                }
            })
            .into(dataBinding.ivBanner);

如您所愿。

我认为问题在于您没有在没有布局尺寸的情况下将任何图像添加到 imageView。 首先,您应该将图像添加到 imageView。为此,请执行此步骤

1 复制您的图像并粘贴到可绘制文件 (app-res-drawable)。然后将其命名为文件名

2 将此行添加到您的 imageView

android:background="@drawable/file-name

我花了几天时间寻找解决方案。下面我添加了全部必要的代码

在清单中

 android:hardwareAccelerated="false"

在XML文件中

<ProgressBar
    android:id="@+id/progressBarId"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true" />

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#dddddd">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <com.jsibbold.zoomage.ZoomageView
            android:id="@+id/imageViewId"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="vertical"
            android:scaleType="matrix"
            app:zoomage_animateOnReset="true"
            app:zoomage_doubleTapToZoom="true"
            app:zoomage_maxScale="8"
            app:zoomage_zoomable="true" />
    </LinearLayout>
</ScrollView>

在Java代码

    progressBar.setVisibility(View.VISIBLE);
    Glide.with(getApplicationContext())
            .load(pdf_link)
            .listener(new RequestListener<Drawable>() {
                @Override
                public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                    return false;
                }

                @Override
                public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                    progressBar.setVisibility(View.GONE);
                    return false;
                }
            })
            .into(imageView);

依赖

implementation 'com.jsibbold:zoomage:1.3.1'
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'