Android 自定义双向滑动SeekBar ,一些需要价格区间选择的App可能需要用到
1. 自定义MySeekBar 继承 View,先给一张效果图。
2.原理:自定义attrs属性,从布局中获取SeekBar最小值、坐标点个数、2点间代表的数值。
3.由SeekBar最小值、坐标点个数、2点间代表的数值确定 每个坐标点的所代表的数值。
4.onMeasure()方法中设置MySeekBar长宽比。
5.onSizeChanged()方法中计算滑动指示器半径、设置每个坐标点的坐标。
6.onDraw()方法中依次画背景线、2个指示器间的区间线、2个滑动指示器。
7.onTouchEvent()方法中,Down判断是否命中滑动指示器,Move时在命中的条件下进行有限滑动,Up时根据是否有滑动启动属性动画。
8.MySeekBar 内部类 CircleIndicator代表滑动指示器,Point代表坐标类以及OnSeekFinishListener回调接口。
9.首先给出自定义属性,后面会使用到。values文件夹建立attrs xml。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MySeekBar">
<!-- SeekBar 最小值-->
<attr name="min" format="integer"/>
<!-- SeekBar 2点间代表的数值-->
<attr name="per_value" format="integer"/>
<!-- SeekBar供有多少个点-->
<attr name="point_count" format="integer"/>
<!-- 背景线颜色-->
<attr name="back_line_color" format="color"/>
<!-- 区间线颜色-->
<attr name="indicator_line_color" format="color"/>
<!-- 滑动指示器颜色-->
<attr name="indicator_color" format="color"/>
</declare-styleable>
</resources>
10.再看下布局。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff2f2"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:orientation="vertical"
android:padding="20dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/min"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:textSize="15sp"/>
<TextView
android:id="@+id/max"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:textColor="#000000"
android:textSize="15sp"/>
&l