繁体   English   中英

Android-在GridView上滚动时,通用图像加载器很慢

[英]Android - Universal Image Loader is laggy when scroll on GridView

我使用Universal Image LoaderGridView显示图像。 我将图像放在可绘制的文件夹中。 但是当我滚动它时,它非常笨拙! 我尝试PauseOnScrollListener但是滚动仍然很慢...

这是我的GridView片段和适配器:

    public class SubCategoryFragment extends Fragment {

    TypedArray imgIDs;
    int[] imgResIds;
    String subCatTitle[];
    DisplayImageOptions options;
    ImageLoaderConfiguration config;
    ImageLoader imageLoader;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        options = new DisplayImageOptions.Builder()
                    .cacheInMemory(true)
                    .cacheOnDisk(true)
                    .bitmapConfig(Bitmap.Config.RGB_565)
                    .imageScaleType(ImageScaleType.EXACTLY)
                    .build();
        config = new ImageLoaderConfiguration.Builder(getActivity())
                    .memoryCacheSize(41943040)
                    .discCacheSize(104857600)
                    .threadPoolSize(5)
                    .build();
        imageLoader = ImageLoader.getInstance();
        imageLoader.init(config);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.sub_category_fragment, container, false);
        ImageLoader.getInstance().init(config);
        //if(getArguments().getString("cat") == "choose"){
            subCatTitle = getResources().getStringArray(R.array.choose);
            imgIDs = getResources().obtainTypedArray(R.array.chooseImgIDs);
        //}
            imgResIds = new int[imgIDs.length()];
            for(int i = 0; i < imgIDs.length(); i++)
                imgResIds[i] = imgIDs.getResourceId(i, -1);
            imgIDs.recycle();
        ((GridView) view.findViewById(R.id.sub_category_gridview)).setOnScrollListener(new PauseOnScrollListener(imageLoader, false, true));
        ((GridView) view.findViewById(R.id.sub_category_gridview)).setAdapter(new CustomGrid(getActivity()));
        return view;
    }

    public class CustomGrid extends BaseAdapter{
        private Context mContext;

          public CustomGrid(Context c) {
              mContext = c;
          }
        @Override
        public int getCount() {
          // TODO Auto-generated method stub
          return subCatTitle.length;
        }
        @Override
        public Object getItem(int position) {
          // TODO Auto-generated method stub
          return null;
        }
        @Override
        public long getItemId(int position) {
          // TODO Auto-generated method stub
          return 0;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
          // TODO Auto-generated method stub
            ViewHolder viewHolder;
            if(convertView == null){
                LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.sub_category_view, parent, false);
                viewHolder = new ViewHolder();
                viewHolder.subCatView = (LinearLayout) convertView.findViewById(R.id.sub_category_view);
                viewHolder.subCatImg = (ImageView) convertView.findViewById(R.id.sub_category_img);
                viewHolder.subCatTitle = (TextView) convertView.findViewById(R.id.sub_category_name);
                convertView.setTag(viewHolder);

            }
            else{
                //imgIDs.recycle();
                viewHolder = (ViewHolder) convertView.getTag();
            }
            viewHolder.subCatTitle.setText(subCatTitle[position]);
            imageLoader.displayImage("drawable://"+imgResIds[position], viewHolder.subCatImg, options);
            return convertView;
        }
    }
    public class ViewHolder{
        public TextView subCatTitle;
        public ImageView subCatImg;
        public LinearLayout subCatView;
    }

}

这是My GridView项的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:gravity="center"
    android:id="@+id/sub_category_view">
    <ir.motorel.carbuyinstruduction.SquareLinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/button">
        <ImageView 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:maxWidth="250dp"
            android:maxHeight="250dp"
            android:src="@drawable/picture1"
            android:adjustViewBounds="true"
            android:scaleType="fitCenter"
            android:layout_margin="10dp"
            android:id="@+id/sub_category_img"/>
    </ir.motorel.carbuyinstruduction.SquareLinearLayout>
    <TextView
        android:layout_marginTop="5dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Hello"
        android:gravity="center"
        android:textColor="#C36518"
        android:id="@+id/sub_category_name"/>
</LinearLayout>

问题是什么?

也许这不是原因,但是您应该使用本机方式(参见库git页面上)以本机方式加载可绘制对象:注意:仅在确实需要时才使用drawable://! 始终考虑加载可绘制对象的本机方法-ImageView.setImageResource(...),而不是使用ImageLoader。

其次,我将尝试删除包装布局(SquareLinearLayout),然后看看它如何进行。 它也可能是由您的图像尺寸引起的,请确保您使用的是缩略图尺寸的图像。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM