当前位置: 首页 > 知识库问答 >
问题:

Android-配备毕加索或通用图像加载器的厨房

谭京
2023-03-14

我正试图使用GridView毕加索\通用图像加载器制作一个画廊,我遇到了一些问题。每次我只加载本地文件(从外部存储),而不是从web。我制作了两个视频,更好地描述了问题,然后是文字。

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

拇指是带有图像的File数组

加载图像速度足够快,但滚动速度非常慢。这是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;
}

滚动速度快,但加载速度慢。此外,当你快速滚动时,你可以看到错误的图像,这些图像将被正确的(加载后)替换几秒钟。youtube上的演示

我在这里添加了视图保持器模式。

@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;
}

有什么好方法可以让gallery更快地工作(完美地作为一个原生android应用程序)?

共有1个答案

邬浩涆
2023-03-14

尝试使用谷歌推荐的Glide Image Loader Library,请参阅此处:-https://coderzpassion.com/android-working-glide-image-loader-library/

 类似资料:
  • 从internet加载文本数据并链接到图像。我无法理解如何在listview中加载图像。阅读后,它需要使用毕加索或通用图像加载器,但不明白如何使用。请更正我的代码 }

  • 我正在使用毕加索图书馆。我知道,如果我将图片从URL加载到图像视图中,有一种回调方法。但我不想加载到imageview中。相反,我想将其另存为位图。所以我用了下面的代码 我怎样才能得到一个回调方法,知道我的图像是成功下载使用毕加索? 不要说位图对象的空检查。这会导致错误。

  • 我有一个从服务器加载映像的项目。我这样用毕加索, 多谢了。

  • 我正在使用volley向tmdb数据库发出RESTAPI请求,以加载有关电影的信息。回收器视图应显示缩略图图像海报。但它没有显示任何东西。我正在使用毕加索图书馆加载图像。图像链接构造得很好,我已经用log语句检查过了 主要活动。xml 列出项目布局。xml 主要活动 电影数据加载器

  • 我面临毕加索无法快速加载图像的问题。 有3个显示左、中、右图像。在快进/后退时,对于给定的时间点,选择左、中、右并显示在三个框中。 这是初始化。缓存是100MB以及99MB的 窗口移动的图像数是3000。所以我将图像预加载为 平均图像大小为10KB-320x180,因此达到35MB,小于99MB。 当快速循环工作时,许多图像是(来自)和(来自),但在几个快速循环之后,3个图像冻结或变得非常慢。此时

  • 我正在寻找Android中的异步图像加载和缓存库。我本来打算用毕加索,但我发现通用图像加载器在GitHub上更受欢迎。有人知道这两个图书馆吗?总结一下利弊就好了。 (我所有的图像都在本地磁盘上,因此我不需要联网,因此我认为凌空截击不合适)