Android应用开发之Android RecyclerView使用ItemDecoration刻画时间线/时间轴/时光轴timeline
凌雪 2018-10-18 来源 :网络 阅读 1496 评论 0

摘要:本文将带你了解Android应用开发之Android RecyclerView使用ItemDecoration刻画时间线/时间轴/时光轴timeline,希望本文对大家学Android有所帮助。

本文将带你了解Android应用开发之Android RecyclerView使用ItemDecoration刻画时间线/时间轴/时光轴timeline,希望本文对大家学Android有所帮助。


Android   RecyclerView使用ItemDecoration刻画时间线/时间轴/时光轴timeline
   
    在Android开发中时间线/时间轴/时光轴现在很常见,尤其涉及到进度、物流信息、进展和时态发展的图表信息等,时间线/时间轴/时光轴生动表现这一类需求。
在RecyclerView的基础上,我使用ItemDecoration刻画一条在RecyclerView左侧的时间线/时间轴/时光轴。运行结果如图:
   
   
    在顶部显示一张与众不同的icon,区别表示事件或者进展已经完成。
下面是代码。
RVActivity.java是本例运行的Activity:
package zhangphil.test; import   android.content.Context;import android.graphics.Canvas;import   android.graphics.Color;import android.graphics.Paint;import   android.os.Bundle;import android.support.annotation.NonNull;import   android.support.annotation.Nullable;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.ImageView;import   android.widget.TextView; import java.util.ArrayList; public class   RVActivity extends AppCompatActivity   {    RecyclerViewAdapter   mAdapter;    private ArrayListmItems;     @Override    protected   void onCreate(@Nullable Bundle savedInstanceState)   {        super.onCreate(savedInstanceState);        setContentView(R.layout.rv_activity);         mItems   = new ArrayList<>();        for   (int i = 0; i < 5; i++) {            mItems.add(i);        }         RecyclerView   mRecyclerView =   findViewById(R.id.recycler_view);        LinearLayoutManager   layoutManager = new   LinearLayoutManager(this);        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);        mRecyclerView.setLayoutManager(layoutManager);         mAdapter   = new   RecyclerViewAdapter();        mRecyclerView.setAdapter(mAdapter);         mRecyclerView.addItemDecoration(new   RVItemDecoration(getApplicationContext()));    }     private   class RecyclerViewAdapter extends RecyclerView.Adapter  {         @NonNull        @Override        public   MyVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType)   {            View   view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.rv_item,   parent,   false);            return   new MyVH(view);        }         @Override        public   void onBindViewHolder(@NonNull MyVH holder, int position)   {            holder.title.setText("时间:" +   position);            holder.content.setText("事件进度 -> " +   mItems.get(position));            holder.indicator_icon.setImageResource(position   == 0  R.mipmap.ic_launcher :   R.drawable.ic_launcher_background);        }         @Override        public   int getItemCount()   {            return   mItems.size();        }    }     private   class MyVH extends RecyclerView.ViewHolder   {        public TextView   title;        public TextView   content;        public ImageView   indicator_icon;         public   MyVH(View itemView) {            super(itemView);            title   =   itemView.findViewById(R.id.title);            content   = itemView.findViewById(R.id.content);            indicator_icon   =   itemView.findViewById(R.id.indicator_icon);        }    }     private   class RVItemDecoration extends RecyclerView.ItemDecoration   {         private Paint   mPaint;         public   RVItemDecoration(Context context) {            mPaint   = new   Paint();            mPaint.setAntiAlias(true);            mPaint.setStrokeWidth(2);   //时间轴线的宽度。            mPaint.setColor(Color.BLUE);   //时间轴线的颜色。        }         @Override        public   void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state)   {            super.onDraw(c,   parent,   state);             int   childCount =   parent.getChildCount();             for   (int i = 0; i < childCount; i++)   {                View   view = parent.getChildAt(i);                 //int   index =   parent.getChildAdapterPosition(view);                 float   left = dip2px(getApplicationContext(), 14 +   10);                float   bottom =   view.getBottom();                 c.drawLine(left,   dip2px(getApplicationContext(), (50 - 20) / 2), left, bottom,   mPaint);            }        }    }     public   static int dip2px(Context context, float dpValue)   {        float scale =   context.getResources().getDisplayMetrics().density;        return   (int) (dpValue * scale + 0.5f);    }}
其中R.layout.rv_activity.xml:
       
其实就只有一个Android的RecyclerView。
RecyclerView的Adapter用到的item布局R.layout.rv_item.xml:
                                     

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved