美文网首页Android各种view精选案例
Android横向滚动自动选中中间控件,底部recyclervi

Android横向滚动自动选中中间控件,底部recyclervi

作者: ChenXinFei | 来源:发表于2018-04-04 16:34 被阅读529次

LocateCenterHorizontalView使用方法

一、参考效果

文中的Demo地址位于:
https://github.com/chenxinfei/LocateCenterHorizontalView
插入gif代码: gif5.gif

一、特点

1.使用方式和Recyclerview基本一样,非常易用。
2.当滑动停止的时候默认选中中间的item,字体变大,变色,底部Recyclerview更着变到当前选中的position
3.支持手动控制选中任意item

二、使用方式

1.主要代码
基本使用 和Recyclerview一模一样,唯一不同的是在继承RecyclerView.Adapter时要实现 AutoLocateHorizontalView.IAutoLocateHorizontalView 接口。如下所示:

public class IndexZhouTextAdapter extends RecyclerView.Adapter<IndexZhouTextAdapter.AgeViewHolder>
    implements LocateCenterHorizontalView.IAutoLocateHorizontalView 

在该接口中我们要实现两个方法:

@Override
public void onViewSelected(boolean isSelected, int pos, RecyclerView.ViewHolder holder, int itemWidth) {
    if (isSelected) {
        ((AgeViewHolder) holder).name.setTextSize(20);
        ((AgeViewHolder) holder).name.setTextColor(Color.parseColor("#FD7422"));
    } else {
        ((AgeViewHolder) holder).name.setTextSize(14);
        ((AgeViewHolder) holder).name.setTextColor(Color.parseColor("#999999"));
    }
}

其中getItemView()方法是用来获取列表中的每一个item的布局,可以在onCreateViewHolder()方法中获取如:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(context).inflate(R.layout.item_bar,parent,false);
    this.itemView = itemView;
    ViewHolder holder = new ViewHolder(itemView);
    return holder;
}

LocateCenterHorizontalView滑动监听停止底部Recyclerview跟着改变

zhouText.setOnSelectedPositionChangedListener(new LocateCenterHorizontalView.OnSelectedPositionChangedListener() {
        @Override
        public void selectedPositionChanged(int pos) {
            if (zhouTextAdapter.getData().size() > 0) {
                int i = pos % zhouTextAdapter.getData().size();
                moveToPosition(i);
            }
        }
    });

底部Recyclerview自动滑动到LocateCenterHorizontalView选中的position

private void moveToPosition(int n) {
    mIndex = n;
    //先从RecyclerView的LayoutManager中获取第一项和最后一项的Position
    LinearLayoutManager layoutManager = (LinearLayoutManager) zhouImage.getLayoutManager();
    int firstItem = layoutManager.findFirstVisibleItemPosition();
    int lastItem = layoutManager.findLastVisibleItemPosition();
    //然后区分情况
    if (n <= firstItem) {
        //当要置顶的项在当前显示的第一个项的前面时
        zhouImage.smoothScrollToPosition(n);
    } else if (n <= lastItem) {
        //当要置顶的项已经在屏幕上显示时
        int top = zhouImage.getChildAt(n - firstItem).getTop();
        zhouImage.scrollBy(0, top);
    } else {
        //当要置顶的项在当前显示的最后一项的后面时
        zhouImage.scrollToPosition(n);
        //这里这个变量是用在RecyclerView滚动监听里面的
        move = true;
    }

}

而 onViewSelected()方法中可以根据item是否被选中设置选中效果,比如选中时改变颜色,或者加粗等。

2. 常用方法

setInitPos(int pos) 设置最开始时选中的位置。

setItemCount(int itemCount) 设置每屏显示多少个item,item越多,则每个item的宽度相应的变小。

setOnSelectedPositionChangedListener(OnSelectedPositionChangedListener listener) 设置位置改变时的监听器,当滑动或增加、删除数据时,只要选中的位置发生了改变就会回调。注意,当增加和删除时,有可能选中的位置不变,但这个时候选中的数据不再是原来的数据也会回调。

源码地址:https://github.com/chenxinfei/LocateCenterHorizontalView 欢迎star

相关文章

网友评论

  • 41bd8d7df4cc:怎么让默认选中的在第一个,而不是中间
  • b8c8ecc8d2c9:正好项目需要,找了半天,感谢~

本文标题:Android横向滚动自动选中中间控件,底部recyclervi

本文链接:https://www.haomeiwen.com/subject/dctlhftx.html