2017-05-03 31 views
3

我有一個recyclerview和一個imageview,我想在scroll上更改imageview圖像,但我不知道如何獲取當前位置,並通過它從列表中獲取我的圖像,然後將其與Picasso一起加載到imageview!如何獲得水平recyclerview中的當前位置?

這裏是我的代碼:

<ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/main_background" 
     android:background="#80000000" 
     android:scaleType="centerCrop" 
     /> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="400dp" 
     android:layout_centerInParent="true" 
     android:layout_marginBottom="30dp" 
     android:layout_marginTop="30dp"/> 

我的適配器:

public class Place_Adapter extends RecyclerView.Adapter<Place_View_Holder> { 
    private List<Place> objects; 
    private Activity context; 

    public Place_Adapter(List<Place> objects,Activity context){ 
     this.context=context; 
     this.objects=objects; 

    } 

    @Override 
    public Place_View_Holder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.place_item, parent, false); 
     Place_View_Holder place_view_holder=new Place_View_Holder(v); 
     return place_view_holder; 
    } 

    @Override 
    public void onBindViewHolder(Place_View_Holder holder, int position) { 
     Picasso.with(context) 
       .load(objects.get(position).getItem_Image()) 
       .placeholder(R.mipmap.image) 
       .error(R.mipmap.image) 
       .into(holder.image); 
     holder.place_name.setText(objects.get(position).getPName()); 
     holder.place_in_map.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       context.startActivity(new Intent(context, MapsActivity.class)); 
      } 
     }); 

    } 

    @Override 
    public int getItemCount() { 
     return objects.size(); 
    } 
} 

這是我的活動

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
      @Override 
      public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
       super.onScrollStateChanged(recyclerView, newState); 
       if (newState == RecyclerView.SCROLL_STATE_IDLE) { 
        ////here i want to change imageview image 
       } 
      } 
     }); 
+0

哪裏是你的活動代碼?和你的適配器?把他們所有在這裏 –

+0

@LuizFernandoSalvaterra我把他們 –

+0

你想這樣做,沒有點擊吧?只是在某個位置滾動回收站視圖? –

回答

5
SnapHelper mSnapHelper = new PagerSnapHelper(); 
mSnapHelper.attachToRecyclerView(recyclerView); 
LayoutManager recylerViewLayoutManager = new LayoutManager(view.getContext(), LinearLayoutManager.HORIZONTAL, false) ;; 
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
      super.onScrollStateChanged(recyclerView, newState); 
      if (newState == RecyclerView.SCROLL_STATE_DRAGGING) { 
        //Dragging 
       } else if (newState == RecyclerView.SCROLL_STATE_IDLE) { 
        review_position = recylerViewLayoutManager.findFirstVisibleItemPosition(); 
       /* 
        Here load the Image to image view with picaso 
       */ 
       Picasso.with(itemView.getContext()) 
        .load(url) 
        .into(yourImageView, new Callback() { 
         @Override 
         public void onSuccess() { 

         } 

         @Override 
         public void onError() { 

         } 
        }); 
       } 
      } 
     } 

     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 

      int firstVisibleItem = recylerViewLayoutManager.findFirstVisibleItemPosition(); 
       /* Log.e ("VisibleItem", String.valueOf(firstVisibleItem));*/ 

     } 
    }); 

這裏

SnapHelper mSnapHelper = new PagerSnapHelper(); 

這使得水平回收視圖來顯示和在一次滾動整個一個項目,所以你不能陷在中間像看到一半,另一半隱形

+0

謝謝,這段代碼很好用。 –

相關問題