android_recyclerView实现指示器效果

效果图:

layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_indicator"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.iamchan.allfunction.ui.program.IndicatorActivity">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <include layout="@layout/toolbar"></include>
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyc"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView>
        <View
            android:background="#f5f5f5"
            android:layout_width="match_parent"
            android:layout_height="2dp"></View>
    </LinearLayout>
</RelativeLayout>

item:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="wrap_content"
    android:layout_height="wrap_content">
    <TextView
        android:padding="10dp"
        android:id="@+id/name"
        android:text="头条"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

java:

public class IndicatorActivity extends SwipeBackActivity {


    @BindView(R.id.iv_imgLeft)
    ImageView ivImgLeft;
    @BindView(R.id.tv_title)
    TextView tvTitle;
    @BindView(R.id.recyc)
    RecyclerView recyc;

    private int indicatorTag;
    private IndicatorAdapter indicatorAdapter;
    private List<String> indicatorList= Arrays.asList("头条","头条","头条","头条","头条","头条","头条","头条","头条","头条","头条","头条","头条","头条","头条","头条");//数据源

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_indicator);
        ButterKnife.bind(this);
        initView();
    }

    private void initView() {
        ivImgLeft.setImageResource(R.drawable.left);
        ivImgLeft.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        tvTitle.setText("indicator");

        indicatorAdapter=new IndicatorAdapter();//创建适配器对象
        recyc.setAdapter(indicatorAdapter);//recyclerView加载适配器
	//布局管理器
        LinearLayoutManager lin=new LinearLayoutManager(this);
        lin.setOrientation(LinearLayoutManager.HORIZONTAL);
        recyc.setLayoutManager(lin);
    }


	//创建recyclerView 的适配器 内部类构造方法就没有创建
    private class IndicatorAdapter extends RecyclerView.Adapter<IndicatorAdapter.MyViewHolder>{
	//创建viewHolder
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            return new MyViewHolder(LayoutInflater.from(IndicatorActivity.this).inflate(R.layout.item_indicator,parent,false));
        }
	//绑定数据
        @Override
        public void onBindViewHolder(MyViewHolder holder, final int position) {
	//绑定数据
            holder.name.setText(indicatorList.get(position));
	//判断是否为第一个 如果是第一个颜色为蓝色 不是第一个颜色为黑色  初始化属性(成员变量)时没有添加值系统会自动添加一个初始化值(0)
            if(position==indicatorTag){
		//getResources().getColor(R.color.blue) 这种获取颜色也行 但是画横线了 尽量别用
                holder.name.setTextColor(ContextCompat.getColor(IndicatorActivity.this, R.color.blue));
            }else{
                holder.name.setTextColor(ContextCompat.getColor(IndicatorActivity.this, R.color.black));
            }
	//点击事件这里是关键 获取点击的position(位置) 赋值给indicatorTag 刷新adapter
            holder.view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    indicatorTag=position;
                    indicatorAdapter.notifyDataSetChanged();
                }
            });
        }
	//获取item的个数
        @Override
        public int getItemCount() {
            return indicatorList.size();
        }
	//创建viewholder
        public class MyViewHolder extends RecyclerView.ViewHolder {
            private TextView name;
            private View view;
            public MyViewHolder(View itemView) {
                super(itemView);
                view=itemView;
                name=itemView.findViewById(R.id.name);
            }
        }

    }



}

猜你喜欢

转载自blog.csdn.net/iamchan/article/details/83897385