首页 > 代码库 > 用开源项目RangBar来实现有范围的SeekBar

用开源项目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

 

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