2014-12-20 4 views
0

쇼 이미지에 을 사용합니다. GridView입니다. 내 이미지를 드로어 블 폴더에 넣습니다. 하지만 스크롤 할 때 매우 어둡습니다. 나는 PauseOnScrollListener 시도하지만 여전히 스크롤에 느린 ...안드로이드 - GridView에서 스크롤 할 때 유니버설 이미지 로더가 뒤떨어 짐

이 내의 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; 
    } 

} 

그리고 이것은 내의 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> 

무엇 ?

답변

1

아마 이유는 없지만이 노트 (라이브러리 git 페이지에서)를 본다면 일반적인 방법으로 드로어 블을로드해야합니다. 참고 : 정말로 필요할 경우에만 drawable : //을 사용하십시오! ImageLoader를 사용하는 대신 drawable - ImageView.setImageResource (...)를로드하는 기본 방법을 항상 고려하십시오.

둘째로 나는 배치 레이아웃 (SquareLinearLayout)을 제거하고 어떻게되는지 보려고합니다. 그것도 당신의 이미지 크기로 인해 발생할 수 있습니다, 당신은 엄지 손톱 크기의 이미지를 사용하고 있는지 확인하십시오.

+0

'ImageView.setImageResource (...) '문제는 그것을 사용할 때 메모리 예외가 발생합니다! – K2evil

+0

이미지의 크기는 얼마입니까? –

+0

150 * 150 픽셀 – K2evil

관련 문제