Android Picasso - 图片无法完全加载

时间:2017-12-14 05:42:46

标签: android user-interface gridview imageview picasso

您好我使用Picasso在网格视图中加载图像,但第一张图片似乎很少见。下面是图像的屏幕截图。

enter image description here

另外,如果我点击一个可以刷新网格视图的按钮,一切都很完美

gridview.invalidateViews();
adapter = new CVC(getActivity(), colorImageArrayList, colorImageFileArrayList);
gridview.setAdapter(adapter);

enter image description here

在网格视图中获取图像的代码

class CVC extends ArrayAdapter<ImageView> {
    private Context context;
    private ArrayList<ImageView> colorImageArrayList;
    private ArrayList<String> colorImageFileArrayList;

    public CVC(Context c, ArrayList<ImageView> colorImageArrayList, ArrayList<String> colorImageFileArrayList) {
        super(c, R.layout.colorcvc, colorImageArrayList);
        this.context = c;
        this.colorImageArrayList = colorImageArrayList;
        this.colorImageFileArrayList = colorImageFileArrayList;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View rowView = inflater.inflate(R.layout.colorcvc, parent, false);

        final ImageView viewImage = (ImageView) rowView.findViewById(R.id.cvc_image);
        ImageView image = colorImageArrayList.get(position);
        if (image == null) {
            String imageFileURL = colorImageFileArrayList.get(position);
            Picasso.with(context).load(imageFileURL).placeholder(null)
                    .error(R.mipmap.ic_launcher)
                    .into(viewImage, new com.squareup.picasso.Callback() {
                                @Override
                                public void onSuccess() {
                                    // replace image in index (position)
                                }
                                @Override
                                public void onError() {
                                }
                            }
                    };
        } else
            viewImage.setImageDrawable(image.getDrawable());
        return rowView;
    }
}

R.layout.colorcvc

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/cvc_image"
        android:layout_width="100dp"
        android:layout_height="85dp" />

    <TextView
        android:id="@+id/cvc_colorname"
        android:layout_width="100dp"
        android:layout_height="15dp"
        android:gravity="center"/>

</LinearLayout>

2 个答案:

答案 0 :(得分:0)

如果你想用全尺寸加载它,你可以在图像视图上使用 scaleType 。但正如我在评论中说的那样,你的身高是硬编码的,所以这会导致图像拉伸。

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

    <ImageView
        android:id="@+id/cvc_image"
        android:layout_width="match_parent"
        android:layout_height="85dp" />

</LinearLayout>

加载

Picasso.with(this).load(url).placeholder(null)
            .error(R.mipmap.ic_launcher)
            .into(imageView, new Callback() {
                @Override
                public void onSuccess() {

                }

                @Override
                public void onError() {

                }
            });

输出。

enter image description here

答案 1 :(得分:0)

试试这些

Picasso.with(context).load(imageFileURL).placeholder(null)
                .error(R.mipmap.ic_launcher)
                .fit().centerCrop()
                .into(viewImage, new com.squareup.picasso.Callback() {
                            @Override
                            public void onSuccess() {
                                // replace image in index (position)
                            }
                            @Override
                            public void onError() {
                            }
                        }
                };

您也可以只使用fit()。但是centerCrop()用于避免拉伸图像。 您也可以使用像

这样的调整大小功能
.resize(600,200) //pixel size dimensions