Kotlin超简单实现StepView的方法

TimeLineStepView

支持时间轴和StepView,三种布局,支持水平布局,垂直布局和自定义布局,截图如下

添加依赖

implementation 'com.joketng:TimeLineStepView:1.0.1'

使用方法

在布局文件中添加TimeLineStepView

<com.joketng.timelinestepview.view.TimeLineStepView
    android:id="@+id/rvVertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:lineWidth="3dp"
    app:markSize="10dp"
    android:paddingStart="20dp"
    app:markStart="@drawable/shape_circle_orange"
    app:layoutType="right"
    />

在代码中调用

//OrientationShowType对应三种布局方式
//OrientationShowType.TIMELINE(时间轴方式)
//OrientationShowType.CENTER_VERTICAL(垂直方式)
//OrientationShowType.CENTER_HORIZONTAL(水平方式,支持左右滑动)
rvVertical.initData(listContent, OrientationShowType.CENTER_VERTICAL,
        object : TimeLineStepView.OnInitDataCallBack{
          override fun onBindDataViewHolder(holder: TimeLineStepAdapter.CustomViewHolder, position: Int) {

          }

          override fun createCustomView(leftLayout: ViewGroup, rightLayout: ViewGroup, holder: TimeLineStepAdapter.CustomViewHolder) {
             //LayoutInflater.from(context).inflate(R.layout.item_add_left_view, leftLayout, true)
             //LayoutInflater.from(context).inflate(R.layout.item_add_right_view, rightLayout, true)
          }

        })
        .setLayoutType(type)//设置布局显示的样式左边:LayoutType.LEFT,右边:LayoutType.RIGHT,左右:LayoutType.ALL
        //设置stepview进度激活的mark图标
        .setMarkActive(ContextCompat.getDrawable(context,R.drawable.shape_dot_orange)!!)
        //设置stepview进度没激活的mark图标
        .setMarkInActive(ContextCompat.getDrawable(context,R.drawable.shape_dot_gray)!!)
        //设置stepview当前进度点的mark图标
        .setMarkCurrent(ContextCompat.getDrawable(context,R.drawable.shape_current)!!)
        //设置stepview第一个mark的图标
        .setMarkStart(ContextCompat.getDrawable(context,R.drawable.shape_circle_orange)!!)
        //设置stepview最后一个mark的图标
        .setMarkEnd(ContextCompat.getDrawable(context,R.drawable.shape_circle_orange)!!)
        //设置stepview线的宽度
        .setLineWidth(context.dipc(2))
        //设置stepview进度激活时线的颜色
        .setLineActiveColor(ContextCompat.getColor(context,R.color.c_main_orange))
        //设置stepview进度没有激活时线的颜色
        .setLineInActiveColor(ContextCompat.getColor(context,R.color.c_main_gray))
        //设置是否需要自定义布局(此时将createCustomView中的注释打开将自定义布局传入)
        .setIsCustom(true)

listContent的取值为 mutableListOf(),当存在自定义布局的时候,listContent中添加的实体需要继承BaseBean这个实体,如果不需要自定义布局,可以直接添加实体BaseBean

listContent.add(BaseBean(leftTitle = "11-11", leftTime = "08:30", rightTitle = "订单提交成功", rightTime = "订单提交成功描述", timeLineState = TimeLineState.ACTIVE))
    listContent.add(BaseBean(leftTitle = "11-11", leftTime = "08:31", rightTitle = "订单付款成功", rightTime = "订单付款成功描述", timeLineState = TimeLineState.ACTIVE))
    listContent.add(BaseBean(leftTitle = "11-11", leftTime = "10:00", rightTitle = "仓库已经接单", rightTime = "仓库已经接单描述", timeLineState = TimeLineState.ACTIVE))
    listContent.add(BaseBean(leftTitle = "11-11", leftTime = "10:30", rightTitle = "仓库处理中", rightTime = "仓库处理中描述", timeLineState = TimeLineState.ACTIVE))
    listContent.add(BaseBean(leftTitle = "11-11", leftTime = "11:00", rightTitle = "已出库", rightTime = "已出库描述", timeLineState = TimeLineState.ACTIVE))
    listContent.add(BaseBean(leftTitle = "11-11", leftTime = "11:30", rightTitle = "已发货", rightTime = "已发货描述", timeLineState = TimeLineState.CURRENT))
    listContent.add(BaseBean(leftTitle = "11-11", leftTime = "16:00", rightTitle = "已揽件", rightTime = "已揽件描述", timeLineState = TimeLineState.INACTIVE))
    listContent.add(BaseBean(leftTitle = "11-11", leftTime = "16:30", rightTitle = "运输中", rightTime = "运输中描述", timeLineState = TimeLineState.INACTIVE))

BaseBean的五个参数前四个为控件的文本,前四个参数不传的话该控件就不会显示,最后一个TimeLineState对应进度的三种状态TimeLineState.ACTIVE,TimeLineState.INACTIVE,TimeLineState.CURRENT,根据状态在onBindDataViewHolder方法中设置markdrawable,linecolor等,在设置markSize的时候,如果大小超过30dp,需要在createCustomView方法或者onBindDataViewHolder方法中调用holder.llLine.layoutParams.width设置为大于等于markSize的大小或者设置为WrapContent,如下

holder.llLine.layoutParams.width = context.dip(35)
holder.llLine.layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT

对于布局的显示位置有要求的话可以在createCustomView方法中通过layoutParams来控制

val rightLayoutParams = rightLayout.layoutParams as LinearLayout.LayoutParams
rightLayoutParams.rightMargin = context.dip(30)

如果不喜欢在代码中设置控件属性的话可以选择布局文件中增加属性

<com.joketng.timelinestepview.view.TimeLineStepView
     android:id="@+id/rvVertical"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:paddingStart="20dp"
     app:markSize="10dp"
     app:markStart="@drawable/shape_circle_orange"
     app:markEnd="@drawable/shape_circle_orange"
     app:markActive="@drawable/shape_dot_orange"
     app:markInActive="@drawable/shape_dot_gray"
     app:markCurrent="@drawable/shape_circle_orange"
     app:lineWidth="3dp"
     app:lineActiveColor="@color/c_main_orange"
     app:lineInActiveColor="@color/c_main_gray"
     app:isCustom="false"
     app:layoutType="right"
     />

如果需要可以在onBindDataViewHolder方法中通过holder获取控件改变控件的样式,如果想要添加自定义的UI,可以在createCustomView方法中添加自己定义的布局文件,此时调用setIsCustom(true)即可

rvVertical.initData(listContent, OrientationShowType.CENTER_VERTICAL,
          object : TimeLineStepView.OnInitDataCallBack{
            override fun onBindDataViewHolder(holder: TimeLineStepAdapter.CustomViewHolder, position: Int) {
              holder.tvRightTitle.setTextColor(ContextCompat.getColor(context, R.color.c_main_black))
              holder.tvLeftTitle.setTextColor(ContextCompat.getColor(context, R.color.c_main_black))
              holder.tvRightTime.textSize = 12f
              holder.tvLeftTime.textSize = 12f
              holder.tvRightTime.setTextColor(ContextCompat.getColor(context, R.color.c_main_gray))
              holder.tvLeftTime.setTextColor(ContextCompat.getColor(context, R.color.c_main_gray))
            }

            override fun createCustomView(leftLayout: ViewGroup, rightLayout: ViewGroup, holder: TimeLineStepAdapter.CustomViewHolder) {
              LayoutInflater.from(context).inflate(布局id, leftLayout, true)//添加左边自定义布局
              LayoutInflater.from(context).inflate(布局id, rightLayout, true)//添加右边自定义布局

            }

          }).setLayoutType(type).setIsCustom(true)

自定义布局的一个截图如下

传送门Github Demo

使用Maven

<dependency>
 <groupId>com.joketng</groupId>
 <artifactId>TimeLineStepView</artifactId>
 <version>1.0.1</version>
 <type>pom</type>
</dependency>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Kotlin超简单实现StepView的方法

    TimeLineStepView 支持时间轴和StepView,三种布局,支持水平布局,垂直布局和自定义布局,截图如下 添加依赖 implementation 'com.joketng:TimeLineStepView:1.0.1' 使用方法 在布局文件中添加TimeLineStepView <com.joketng.timelinestepview.view.TimeLineStepView android:id="@+id/rvVertical" android:layout

  • 超简单的qps统计方法(推荐)

    统计最近N秒内的QPS值(包括每秒select,insert等值) mysql> select variable_name,sum(per_sec) as qps from (select straight_join   lower(gs0.variable_name) as variable_name,  (gs1.variable_value - gs0.variable_value)/5 as per_sec from (     select variable_name ,variabl

  • python实现超简单端口转发的方法

    本文实例讲述了python实现超简单端口转发的方法.分享给大家供大家参考.具体如下: 代码非常简单,实现了简单的端口数据转发功能,用于真实环境还需要再修改一下. 复制代码 代码如下: #tcp server import socket host = '127.0.0.1'          #Local Server IP host2 = '127.0.0.1'   #Real Server IP port = 6001 #Local Server Port port2 = 7001 #Real

  • jQuery超简单遮罩层实现方法示例

    本文实例讲述了jQuery超简单遮罩层实现方法.分享给大家供大家参考,具体如下: 在开发中,为了避免二次提交,遮罩层的运用越来越普遍 看了很多代码,下面跟大家分享一下我认为最简单的遮罩层实现方式: 1.样式如下设置: CSS代码: <style type="text/css"> .mask { position: absolute; top: 0px; filter: alpha(opacity=60); background-color: #777; z-index: 1

  • Java中防止数据重复提交超简单的6种方法

    目录 前言 模拟用户场景 前端拦截 后端拦截 1.基础版--HashMap 2.优化版--固定大小的数组 3.扩展版--双重检测锁(DCL) 4.完善版--LRUMap 5.最终版--封装 扩展知识--LRUMap 实现原理分析 总结 前言 有位朋友,某天突然问东哥:在 Java 中,防止重复提交最简单的方案是什么? 这句话中包含了两个关键信息,第一:防止重复提交:第二:最简单. 于是东哥问他,是单机环境还是分布式环境? 得到的反馈是单机环境,那就简单了,于是东哥就开始装*了. 话不多说,我们先

  • javascript之IE版本检测超简单方法

    近年来随着操作系统的升级以及各种新技术的开发普及,抛弃低版本IE已经是大势所趋,这对于前端人员来时是个好消息,可以不用花费太多的时间来做低版本的兼容,很多站点采用给予低版本IE以提示的方式(恩,很友好很人道)给游客,一般是在header上给一个提示,脚本检测如下: function getIEVersion() { var rv = -1; // Return value assumes failure. if(navigator.appName == 'Microsoft Internet E

  • 打字效果动画的4种实现方法(超简单)

    方法一(纯css实现): html代码: <h1 class="typing typing-item">打字动画打字动画打字动画</h1> css样式: .typing{ font-size: 1rem; padding-top: 6%; margin-bottom: 5%; font-weight: normal; letter-spacing: .3rem; -webkit-animation: type 2s steps(50, end) forwards

  • PHP实现超简单的SSL加密解密、验证及签名的方法示例

    本文实例讲述了PHP实现超简单的SSL加密解密.验证及签名的方法.分享给大家供大家参考,具体如下: 1. sign签名代码: function sign($data) { //读取私钥文件 $priKey = file_get_contents('key/rsa_private_key.pem'); //转换为openssl密钥,必须是没有经过pkcs8转换的私钥 $res = openssl_get_privatekey($priKey); //调用openssl内置签名方法,生成签名$sig

  • js获取html的span标签的值方法(超简单)

    HTML中代码为: <span id="testid">aaaa</span> 获取的js代码: 方法一:.innerText var x1 = document.getElementById("testid").innerText; alert("x1="+x1); 方法二:.innerHTML var x2 = document.getElementById("testid").innerHTML;

  • 使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)

    在网站开发中,经常会简单使用js代码来判断字符串中有多少汉字的功能.今天小编抽时间给大家分享实现代码.废话不多说了,直接给大家贴代码了. $("form").submit(function () { var content = editor.getContentTxt(); var sum = 0; re = /[\u4E00-\u9FA5]/g; //测试中文字符的正则 if (content) { if (re.test(content)) //使用正则判断是否存在中文 { if

随机推荐