RecyclerView中的图像 [英] Images in RecyclerView

查看:69
本文介绍了RecyclerView中的图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Android中使用RecyclerView,但在处理图片时遇到了麻烦.

I am using RecyclerView in Android and I am having some trouble with images.

我想在特定文件夹中显示图像列表及其路径名.

I would like to display a list of the images in a particular folder with their path names.

这就是我的row.xml:

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

        <TextView
            android:id="@+id/my_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="test" />

        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true" />

</LinearLayout>

在我的适配器中,我使用以下代码设置行的图像:

In my adapter, I use this code to set the image of a row:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    holder.mTextView.setText(mDataset[position]);
    holder.mImageView.setImageURI(Uri.parse("file://" + mMediaStorageDir.getPath() + "/" + mDataset[position]));
}

图像加载正常,但是当我向下滚动时,整个应用程序变得非常慢.

The images load fine, but when I scroll down the whole app becomes very slow.

当我加载一个小的可绘制对象时,不会发生这种情况.是因为图片太大了吗?

This doesn't happen when I load a small drawable instead. Is it because the pictures are too big?

推荐答案

是.我认为它太大了.

您首先需要加载图像(跟踪以释放可用内存),然后再使用他.

You need load firstly your images(track for free memory) and after that use him.

不一定使用毕加索. 但是您可以使用它.

Not necessarily use Picasso. But you can use it.

我建议您阅读

  • Loading Large Bitmaps Efficiently
  • Displaying Bitmaps Efficiently
  • Caching Bitmaps

示例:

ItemData.java

package com.shustikov.android;

public class ItemData {

    private String title;
    private int imageUrl;

    public ItemData(String title,int imageUrl){

        this.title = title;
        this.imageUrl = imageUrl;
    }

    public String getTitle() {
        return title;
    }

    public int getImageUrl() {
       return imageUrl;
    }
}

RecyclerViewExampleAdapter.java

package com.shustikov.android;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

public class RecyclerViewExampleAdapter extends RecyclerView.Adapter<RecyclerViewExampleAdapter.ViewHolder> {
    private ItemData[] itemsData;

    public RecyclerViewExampleAdapter(ItemData[] itemsData) {
        this.itemsData = itemsData;
    }

    @Override
    public RecyclerViewExampleAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        View itemLayoutView = LayoutInflater.from(parent.getContext())
                               .inflate(R.layout.item_layout, null);

        ViewHolder viewHolder = new ViewHolder(itemLayoutView);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {

        viewHolder.txtViewTitle.setText(itemsData[position].getTitle());
        viewHolder.imgViewIcon.setImageResource(itemsData[position].getImageUrl());
     }

    public static class ViewHolder extends RecyclerView.ViewHolder {

        public TextView txtViewTitle;
        public ImageView imgViewIcon;

        public ViewHolder(View itemLayoutView) {
            super(itemLayoutView);
            txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
            imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
        }
    }


    @Override
    public int getItemCount() {
        return itemsData.length;
    }
}

这篇关于RecyclerView中的图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆