Android ScrollView渲染图像视图非常慢

时间:2014-06-22 10:57:23

标签: android imageview scrollview android-linearlayout

我在我的布局中显示了多个图像视图,这些图像视图以编程方式添加,除了scrollview本身之外,一切似乎都很好......它滚动时非常慢并且在滚动时滞后很多。是什么导致这种情况?

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

    </LinearLayout>
</ScrollView>

编辑:已跟随THIS并成功创建了我的列表视图,但再次滚动时列表视图本身滞后。我从web服务获取imageview源代码,所以基本上我的行项目就像:

public class RowItem {
    private String imageSrc;
    private String title;

    public RowItem(String src, String title)
    {
        this.imageSrc = src;
        this.title = title;
    }
    public String getImageSrc()
            {
        return this.imageSrc;
    }
    public void setImageSrc(String src)
    {
        this.imageSrc = src;
    }
    public String getTitle()
    {
        return this.title;
    }
    public void setTitle(String title)
    {
        this.title = title;
    }
}

我基本上得到了json对象的列表,将'convert转换为RowItem,然后使用以下代码为listview生成行:

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    RowItem rowItem = getItem(position);

    LayoutInflater mInflater = (LayoutInflater) context
        .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item, null);
        holder = new ViewHolder();
        holder.txtTitle = (TextView) convertView.findViewById(R.id.title);
        holder.imageView = (ImageView) convertView.findViewById(R.id.icon);
        convertView.setTag(holder);
    } else
        holder = (ViewHolder) convertView.getTag();
    holder.txtTitle.setText(rowItem.getTitle());
    String url = rowItem.getImageSrc();
    url = url.replace("~", DOMAIN);
    Picasso.with(context).load(url).into(holder.imageView);

    return convertView;
}

它仍然非常糟糕......任何想法?

更新:我认为图像视图导致慢速滚动,因为在图像下载和加载之前一切都很流畅但是在图像加载后它开始减速并且在每次滚动时隐藏的行将会显示再次重新加载图像。这可能是原因吗?

1 个答案:

答案 0 :(得分:0)

您必须使用具有滚动功能的ListView,而不是使用scrollView,并在添加项目时自动展开

第一步,您必须按如下方式定义布局

 <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:id="@android:id/list"
            >

        </ListView>
    </LinearLayout>
  1. 使用getView()方法实现自定义ListView适配器

    查看getView(int position,View convertView,ViewGroup parent) {        查看v = convertView;

       if(v == null)
    
          v = View.inflate(context , R.layout.your_item_layout_containing_image);
    
        ImageView imageView = (ImageView)v.findViewByID(R.id.your_image_view_id);
    
        Picasso.with(context).load(image_url).into(imageView);
        return v;
    

    }

  2. 毕加索是一个图书馆,你可以直接下载并使用它下载的图像,它有很好的功能