• 用开源项目RangBar来实现有范围的SeekBar


     

    RangeBar是一个可以有选择范围的Seekbar,用这个项目其实是很简单的。就是一个自定义控件~

    一、布局文件

    这里可以看到有很多属性可以定制,除了通过xml来定义也可以再java代码中进行定义。

    说明:

    <declare-styleable name="RangeBar">
    
    tickCount:有多少个分割线
    tickHeight:分割线的高度
    barWeight:分割线和滑动条的粗细
    barColor:分割线和滑动条的颜色
    connectingLineWeight:已经选中区域的滑动条宽度
    connectingLineColor:已经选中区域的滑动条颜色(不包括滑块)
    thumbRadius:滑块的半径,其实就是改变滑块的大小
    thumbImageNormal:滑块普通状态的图片
    thumbImagePressed:滑块按下时的图片
    thumbColorNormal:滑块普通状态的颜色
    thumbColorPressed:滑块按下时的颜色
    
    <attr name="tickCount" format="integer" />
    <attr name="tickHeight" format="dimension" />
    <attr name="barWeight" format="dimension" />
    <attr name="barColor" format="reference|color" />
    <attr name="connectingLineWeight" format="dimension" />
    <attr name="connectingLineColor" format="reference|color" />
    <attr name="thumbRadius" format="dimension" />
    <attr name="thumbImageNormal" format="reference" />
    <attr name="thumbImagePressed" format="reference" />
    <attr name="thumbColorNormal" format="reference|color"/>
    <attr name="thumbColorPressed" format="reference|color"/>
    </declare-styleable>

    activity_main.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="${relativePackage}.${activityClass}" >
    
        <!-- 这里可以通过xml进行配置,用到了自定义的命名空间custom,具体的配置属性可以在最下面看到 -->
        <com.edmodo.rangebar.RangeBar
            xmlns:custom="http://schemas.android.com/apk/res-auto"
            android:id="@+id/rangebar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="50dp"
            android:layout_marginTop="50dp"
            custom:tickCount="7" />
        
    </RelativeLayout>
    

    java代码:

    package com.kale.rangbartest;
    
    import com.edmodo.rangebar.RangeBar;
    import com.edmodo.rangebar.RangeBar.OnRangeBarChangeListener;
    
    import android.app.Activity;
    import android.graphics.Color;
    import android.os.Bundle;
    
    public class MainActivity extends Activity {
    
        RangeBar rangeBar;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            rangeBar = (RangeBar)findViewById(R.id.rangebar);
            
            rangeBar.setTickCount(7);//有多少分割线
            rangeBar.setTickHeight(25);//分割线的高度
    
            rangeBar.setBarWeight(6);//分割线和滑动杆的粗细
            rangeBar.setBarColor(0xff000000);//分割线和滑动杆的颜色,
            
            rangeBar.setConnectingLineWeight(5);//设置被选中的区域的宽度
            rangeBar.setConnectingLineColor(Color.parseColor("#ff0000"));//选中区域的颜色
    
            rangeBar.setThumbImageNormal(R.drawable.thumb);//滑块普通状态时显示的图片
            rangeBar.setThumbImagePressed(R.drawable.ic_launcher);//滑块按下时显示的图片
            
            /**
             * 如果setThumbRadius(),setThumbColorNormal(),setThumbColorPressed()其中的一个或多个
             * 进行了设置那么rangbar会自动忽略已经设置好的滑块图片,这是需要注意的!!!
             */
            
            //rangeBar.setThumbRadius(20);//滑块的半径(>0),也就是设置滑块的大小。可以用setThumbRadius(-1)让其回到默认状态
            
            //设置滑块普通状态的颜色,这里会覆盖setThumbImageNormal的设置,如果想要恢复最原始的样子可以setThumbColorNormal(-1)
            //rangeBar.setThumbColorNormal(Color.parseColor("#0000ff"));
            //设置滑块普通状态的颜色,这里会覆盖setThumbImagePressed的设置,如果想要恢复最原始的样子可以setThumbColorPressed(-1)
            //rangeBar.setThumbColorPressed(Color.parseColor("#00ff00"));
            
            rangeBar.setThumbIndices(1, 5);//设置滑块距离左端的位置。这里设置为左滑块距离左边一个格子,右滑块距离左边5个格子
            
            
            //设置监听器
            rangeBar.setOnRangeBarChangeListener(new MyRangBarListener());
        }
        
        /**
         * @author:Jack Tony
         * @tips  :监听滑块选择的监听器
         * @date  :2014-10-22
         */
        private class MyRangBarListener implements OnRangeBarChangeListener{
    
            /**
             * 三个参数:
             * 1.rangbar对象
             * 2.左边的滑块距离左边的距离,这里的距离用每一格来代替
             * 3.右边滑块距离左边的距离,距离用滑块的格数来代替
             * 还需要注意的是:设置left = 2,表示左边滑块处于第三个分割线的位置。
             * 
             * example:
             * leftThumbIndex = 2;rightThumbIndex = 5;
             * 
             *            thumb          thumb     ← 这是左右滑块
             * |————|————|————|————|————|————|     ← 这里是分割线
             */
            @Override
            public void onIndexChangeListener(RangeBar rangeBar,
                    int leftThumbIndex, int rightThumbIndex) {
                System.out.println("leftThumbIndex = "+ leftThumbIndex +
                        " rightThumbIndex = " + rightThumbIndex);
            }
            
        }
        
    }

    注意:如果setThumbRadius(),setThumbColorNormal(),setThumbColorPressed()其中的一个或多个进行了设置那么rangbar会自动忽略已经设置好的滑块图片,这是需要注意的!!!

    效果图:

    属性对比表格:

    来源:https://github.com/edmodo/range-bar/wiki

    源码下载:http://download.csdn.net/detail/shark0017/8069581

  • 相关阅读:
    LoadRunner测试下载功能点脚本(方法二)
    LoadRunner测试下载功能点脚本(方法一)
    LR翻页脚本并在每页实现业务操作
    LR脚本自定义显示Controller虚拟用户状态
    LR选择哪种方式录制
    LR如何监控tomcat性能
    LR使用Java User协议环境报错Please add the <JDK>in to the path and try again
    HttpServletRequest对象请求转发和HttpServletResponse对象请求重定向之间的区别
    java进制转换
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/tianzhijiexian/p/4044086.html
Copyright © 2020-2023  润新知