我有一个recyclerview和一个imageview,我想在滚动上更改imageview图像,但我不知道如何获取当前位置,然后从列表中获取我的图像然后将其加载到Picasso到imageview!
这是我的代码:
<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 } } });
解决方法
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();
这使得水平回收器视图能够显示并滚动整个项目,因此您不会陷入中间,如半可见,另一半看不见