package zhangphil.book;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.drawable.ColorDrawable;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.support.annotation.NonNull;import android.support.v4.content.ContextCompat;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        RecyclerView mRecyclerView = findViewById(R.id.recycler_view);        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);        mRecyclerView.setLayoutManager(linearLayoutManager);        RecyclerViewAdapter adapter = new RecyclerViewAdapter();        mRecyclerView.setAdapter(adapter);        RVItemDecoration mRVItemDecoration = new RVItemDecoration(getApplicationContext());        mRecyclerView.addItemDecoration(mRVItemDecoration);    }    private class RecyclerViewAdapter extends RecyclerView.Adapter {        @NonNull        @Override        public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {            View view = LayoutInflater.from(getApplicationContext()).inflate(android.R.layout.simple_list_item_1, parent, false);            RecyclerViewHolder holder = new RecyclerViewHolder(view);            return holder;        }        @Override        public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) {            holder.text1.setText(position + "");        }        @Override        public int getItemCount() {            return Integer.MAX_VALUE;        }    }    private class RecyclerViewHolder extends RecyclerView.ViewHolder {        public TextView text1;        public RecyclerViewHolder(View itemView) {            super(itemView);            text1 = itemView.findViewById(android.R.id.text1);        }    }    private class RVItemDecoration extends RecyclerView.ItemDecoration {        private Drawable mDrawable;        //轴线距离左侧的距离,单位pix。        private int marginLeft = 20;        //轴线的宽度,单位pix。        private int lineSize = 10;        private Paint mPaint;        public RVItemDecoration(Context context) {            mPaint = new Paint();            mPaint.setAntiAlias(true);            mPaint.setColor(Color.RED);            mDrawable = new ColorDrawable(ContextCompat.getColor(getApplicationContext(), android.R.color.holo_blue_light));        }        @Override        public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) {            canvas.save();            int childCount = parent.getChildCount();            for (int i = 0; i < childCount; i++) {                View child = parent.getChildAt(i);                //先画线。                mDrawable.setBounds(marginLeft, child.getTop(), marginLeft + lineSize, child.getBottom());                mDrawable.draw(canvas);                //后画覆盖在线上的圆球。                canvas.drawCircle(marginLeft + lineSize / 2, (child.getTop() + child.getBottom()) / 2, (lineSize + marginLeft) / 2, mPaint);            }            canvas.restore();        }        /**         * outRect.set()函数相当于给RecyclerView的每一个item的View四周设置margin值。         * 此处的margin值不同于onDraw里面的margin,onDraw里面给mDrawable设置的margin,仅仅是针对分割条而言。         *         * @param outRect         * @param view         * @param parent         * @param state         */        @Override        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {            outRect.set((marginLeft + lineSize) * 2, 0, 0, 0);            //测试。给RecyclerView的每一个item设置一个浅灰色背景。            //便于观察绘制结果。            view.setBackgroundColor(Color.LTGRAY);        }    }}

so:

Android RecyclerView ItemDecoration timeline(一)_第1张图片

更多相关文章

  1. 【黑马Android】(02)短信发送器/布局演示/android下单位/android
  2. Android 的Margin和Padding属性以及支持的长度单位
  3. Android:解决RadioGroup中RadioButton的图片自定义及每项间隔距离
  4. android线性布局控件之间的距离设置
  5. C#如何计算传入的时间距离今天的时间差的实例分享
  6. C#通过KD树进行距离最近点的查找的实例分析
  7. c语言源程序的最小单位是什么
  8. c语言的基本组成单位是什么
  9. c语言的基本单位是什么?

随机推荐

  1. JavaWeb-1-IOS或Android客户端上传图片到
  2. 使用超类中的构造函数
  3. execl中设置的格式无法实现
  4. Java ThreadPoolExecutor 线程池调度器
  5. C/C++比java效率高的原因?
  6. 新手求教RandomAccessFile读写文件到底写
  7. Java中double型数组的HashCode产生
  8. 【java工具类】网站安全---将特殊字符编
  9. mvn依赖的jar,在项目中无法引用,求大神指点
  10. javascript(六)js事件绑定浏览器兼容解决方