Android 自定义双向滑动SeekBar

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
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值