【问题标题】:android - galley with Picasso or Universal Image Loaderandroid - 带有毕加索或通用图像加载器的厨房
【发布时间】:2016-07-17 05:38:57
【问题描述】:

我正在尝试使用 GridView + Picasso\Universal Image Loader 创建画廊,但遇到了一些问题。每次我只加载 本地 文件(来自外部存储),而不是来自网络。我制作了两个视频,更好地描述了问题,然后是文字。

我使用我的自定义适配器扩展 BaseAdapter

thumbs 是一个带有图像的File 数组

毕加索

加载图像足够快,但滚动速度很慢。Here the video demonstration on youtube

    @Override
public View getView(int position, View convertView, ViewGroup parent) {

    //Get the view
    View view;
    if (convertView == null)
        view=inflater.inflate(R.layout.gallery_photo_item,parent,false);
    else
        view =  convertView;

    //find the componetnts
    final ImageView image_view = (ImageView)view.findViewById(R.id.galley_photo_item_image);
    final CheckBox check = (CheckBox)view.findViewById(R.id.galley_photo_item_checkbox);

    //Toggling checkbox if DELETE MODE
    if(is_checking) {
        check.setChecked(false);
        check.setVisibility(View.VISIBLE);
    }
    else
        check.setVisibility(View.INVISIBLE);

    view.setTag(position);
    check.setTag(position);

    //Some event handling
    check.setOnClickListener(this);
    view.setOnClickListener(this);

    //Setting up Picasso
    Picasso.Builder builder = new Picasso.Builder(context);
    builder.listener(new com.squareup.picasso.Picasso.Listener() {

        @Override
        public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
            Log.e("Picasso","Loading failed: "+exception.getMessage());
            image_view.setVisibility(View.GONE);
        }

    });

    //Display image
    Picasso pic = builder.build();
    pic
            .load(thumbs[position])
            //.placeholder(R.drawable.ic_launcher)
            .fit()
            .into(image_view);


    return view;
}

通用图像加载器

快速滚动,但加载速度很慢。此外,当您快速滚动时,您会看到错误的图像,这些图像将在几秒钟内被正确的(当它们加载时)替换。 Demonstration on youtube

我在这里添加了View Holder 模式。

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder view_holder;
    if(convertView==null)
    {
        convertView = inflater.inflate(R.layout.gallery_photo_item,parent,false);
        ImageView image = (ImageView)convertView.findViewById(R.id.galley_photo_item_image);
        CheckBox checkBox = (CheckBox)convertView.findViewById(R.id.galley_photo_item_checkbox);
        view_holder = new ViewHolder(convertView,image,checkBox);
        convertView.setTag(view_holder);
    }
    else
        view_holder = (ViewHolder)convertView.getTag();

    //Toggle checkbox on DELETE MODE
    if(is_checking) {
        view_holder.CheckBox.setChecked(false);
        view_holder.CheckBox.setVisibility(View.VISIBLE);
    }
    else
        view_holder.CheckBox.setVisibility(View.INVISIBLE);

    //view.setTag(position);
    //check.setTag(position);

    //Event handling
    view_holder.CheckBox.setOnClickListener(this);
    view_holder.View.setOnClickListener(this);

    //Display image
    String uri = Uri.fromFile(thumbs[position]).toString();
    ImageLoader loader = ImageLoader.getInstance();
    loader.displayImage(uri,view_holder.ImageView, options);


    return convertView;
}

问题

有什么好方法可以让图库运行得更快(完美地作为原生安卓应用)?

【问题讨论】:

  • 不要在每次调用 getView 时创建新的 picasso 实例;使用单例实例。

标签: android performance picasso universal-image-loader


【解决方案1】:

尝试使用谷歌推荐的 Glide Image Loader Library 参考这里:-https://coderzpassion.com/android-working-glide-image-loader-library/

【讨论】:

  • 谢谢,Glide 很快。第一次 loadig 有点慢,但后来它运行得非常快。
  • 是的,还可以查看我发现非常有趣的材料设计帖子
猜你喜欢
  • 2017-06-15
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
  • 2014-09-26
  • 2019-02-08
相关资源
最近更新 更多