Recyclew和viewpager实现联动 并点击recyclerview条目居中

xml布局


    
    

Activity里面的操作

给viewpager和recyclerview赋值

List fragments = new ArrayList<>();
fragments.add(new FeaturedFragemnt());
fragments.add(new MakeupsFragment());
fragments.add(new FeaturedFragemnt());
fragments.add(new MakeupsFragment());
fragments.add(new FeaturedFragemnt());
fragments.add(new MakeupsFragment());

mBindingView.spikeViewpager.setAdapter(new MovieAdapter(getSupportFragmentManager(),fragments));
for (int i = 0;i<6;i++){
    list.add(new SpikeList("10:00","已抢购"));
}
gridLayoutManager = new GridLayoutManager(this, 1, OrientationHelper.HORIZONTAL, false);

mBindingView.spikeRecy.setLayoutManager(gridLayoutManager);
spikeAdpter = new SpikeAdpter(this, list);
mBindingView.spikeRecy.setAdapter(spikeAdpter);

 

// Fragment的适配器

public class MovieAdapter extends FragmentPagerAdapter {
    List fragments;

    public MovieAdapter(FragmentManager fm, List fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

}

//recyclerview的适配器

public static class SpikeAdpter extends RecyclerView.Adapter{

      private Context context;
      private List list;
      OnItemClickLisenter onItemClickLisenter;
    //点击跳目变色的状态值
      private List isClicks;
      public int pos;
       public void setOnItemClickLisenter(OnItemClickLisenter onItemClickLisenter) {
        this.onItemClickLisenter = onItemClickLisenter;
    }
    public void setBg(int pos) {
        this.pos = pos;
        getPot(pos);
    }

    public SpikeAdpter(Context context, List list) {
        this.context = context;
        this.list = list;
        isClicks = new ArrayList<>();
        for(int i = 0;i 
  

 

//Recyclerview里面展示数据的xml


    
    
    
    

 

//viewpager滑动并选择Recyclerview的条目

mBindingView.spikeViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
          mBindingView.spikeRecy.smoothScrollToPosition(position);
          int size = fragments.size()-1;
           if (position<=size){
               spikeAdpter.getPot(position);
           }else {

           }

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});

//适配器的接口回调获取Recyclerview的下标并赋值给Viewpager实现所对应的viewpager的下标

spikeAdpter.setOnItemClickLisenter(new SpikeAdpter.OnItemClickLisenter() {
    @Override
    public void setClick(View view,int position) {
        mBindingView.spikeViewpager.setCurrentItem(position);
        int size = list.size();
        if(size>2){
            if ( position> 1 && position< size - 2) {
                moveToCenter(view);
            }else if (position>= 0 && position< 2) {
                mBindingView.spikeRecy.smoothScrollToPosition(0);
            } else {
                mBindingView.spikeRecy.smoothScrollToPosition(size-1);
            }
        }
    }
});

//点击条目条目居中

private void moveToCenter(View itemView) {
    int[] locationView = new int[2];
    itemView.getLocationOnScreen(locationView);
    int viewWidth = itemView.getWidth();
    WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    DisplayMetrics dm = new DisplayMetrics();
    wm.getDefaultDisplay().getMetrics(dm);
    int centerX = dm.widthPixels / 2;
    int distance = locationView[0] - centerX + viewWidth / 2;
    mBindingView.spikeRecy.smoothScrollBy(distance, 0);
}

 

//为自定的bean类

public class SpikeList{
    private String time;
    private String grad;

    public SpikeList(String time, String grad) {
        this.time = time;
        this.grad = grad;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getGrad() {
        return grad;
    }

    public void setGrad(String grad) {
        this.grad = grad;
    }
}

你可能感兴趣的:(Recyclew和viewpager实现联动 并点击recyclerview条目居中)