2016-07-25 84 views
3

我有一個回收站視圖,它正在使用通用圖像加載程序進行填充。Recycler查看Scroll上的隨機圖像

@Override 
public MasonryView onCreateViewHolder(ViewGroup parent, int viewType) { 
    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_item, parent, false); 
    MasonryView masonryView = new MasonryView(layoutView); 
    //layoutView.setOnClickListener(new MyOnClickListener()); 
    //imageLoader.destroy(); 
    imageLoader.init(ImageLoaderConfiguration.createDefault(context)); 
    options = new DisplayImageOptions.Builder() 
      .cacheInMemory(true) 
      .resetViewBeforeLoading(true) 
      .cacheOnDisk(true) 
      .considerExifParams(false) 
      .bitmapConfig(Bitmap.Config.RGB_565) 
      .build(); 

    return masonryView; 
} 

@Override 
public void onBindViewHolder(final MasonryView holder, int position) { 

    imageLoader 
      .displayImage(IMAGE_URLS[position], holder.imageView, options, new SimpleImageLoadingListener() { 
       @Override 
       public void onLoadingStarted(String imageUri, View view) { 
        holder.donut_progress.setVisibility(View.VISIBLE); 
        holder.donut_progress.setProgress(0); 
       } 

       @Override 
       public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 

        holder.onLoadImage.setVisibility(View.GONE); 
       } 

       @Override 
       public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
        holder.onLoadImage.setVisibility(View.GONE); 
        holder.donut_progress.setVisibility(View.GONE); 
       } 
      }, new ImageLoadingProgressListener() { 
       @Override 
       public void onProgressUpdate(String imageUri, View view, int current, int total) { 
        holder.donut_progress.setProgress(Math.round(100.0f * current/total)); 
       } 
      }); 


} 

正如您所看到的imageloader和DisplayOptions在CreateView中定義的。

圖像顯示成功,但在滾動圖像時正在洗牌。

以下是我對custom_recycler_grid_item XML

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:custom="http://schemas.android.com/apk/res-auto" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="#00000000" 
android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/img" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true"/> 
    !-- android:scaleType="centerCrop" --! 


    <ImageView 
     android:id="@+id/onLoadImage" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:src="@drawable/camera_cross" 
     android:layout_marginLeft="50dp" 
     android:layout_marginTop="50dp" 
     android:visibility="gone"/> 

    <progressIndicators.DonutProgress 
     android:layout_marginLeft="50dp" 
     android:layout_marginTop="50dp" 
     android:id="@+id/donut_progress" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     custom:donut_unfinished_stroke_width="1dp" 
     custom:donut_finished_stroke_width="1dp" 
     custom:donut_progress="50"/> 

</FrameLayout> 

我的主要碎片,具有recyclerView

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/masonry_grid" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="0.1" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 


</LinearLayout> 

不過,我還設置 adapter.setHasStableIds(真);

+0

安置自己的XML代碼 – vinoth12594

+0

好吧進出口張貼我custom_item.xml –

+0

您添加了android:滾動條=「垂直」在你的回收站視圖 – vinoth12594

回答

2

我完全解決了這個問題。

問題出在我的RecyclerWidget高度和寬度。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.v7.widget.RecyclerView 
    android:id="@+id/masonry_grid" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.1" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 


</LinearLayout> 

我不得不設置我的高度和寬度來包裝內容。

0

通用圖像加載程序異步任務操作。在通用圖像加載器中,他們使用了OkHTTP客戶端服務器操作。這就是你的圖像混洗的原因。嘗試使用Glide加載圖像,這是更好的方法。並且通過這個例子here

簡單,快捷的方式來加載圖像。 (itemView.getContext())。load(Datas.getRequestURL())。centerCrop()。into(mStaticMap);

+0

問題不在佈局中。 –

+0

我馬上試試 –

+0

結果甚至更糟。 –

0

顯示佔位符,直到原始圖像加載,同樣的問題也發生在我的情況,所以我遵循這種方法。

爲此在您的發射器(前)活動

//定製的顯示選項

DisplayImageOptions options = new DisplayImageOptions.Builder() 
     .showImageOnFail(R.drawable.placeholder_steve) 
     .showImageForEmptyUri(R.drawable.placeholder_steve) 
     .showImageOnLoading(R.drawable.placeholder_steve) 
     .bitmapConfig(Bitmap.Config.RGB_565) 
     .considerExifParams(true) 
     .cacheInMemory(true) 
     .cacheOnDisk(true) 
     .build(); 

//配置

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) 
     .defaultDisplayImageOptions(options) 
     /*.diskCache(lruDiskCache)*/ 
     .build(); 
ImageLoader.getInstance().init(config); 
+0

我有一個圓形的進展,直到圖像成功加載 –

+0

@Abdul Ahad我沒有嘗試過循環進度,但沒有進展它的工作原理。 –

+0

最初設置帶有可繪製圖像的位圖,直到原始圖像加載。最終的位圖thumbBitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.placeholder_steve); –

0

問題是與

holder.onLoadImage.setVisibility(View.GONE);

你必須謹慎,你如何設置可見性消失,然後使其可見。最後,它是顯示可見性並未顯示的相同查看者。如果你確保

holder.onLoadImage.setVisibility(View.VISIBLE)

在onBindHolder的開頭()。你應該罰款