Slider,我更喜欢叫他SeekBar,其实是一个东西啦,就是拖动条。5.0的拖动条和4.x上的HOLO风格完全不同,平添了一些精致。此外还加入了数值指示器,让用户在滑动的时候就能知道现在到了什么位置。Ok,理想很美好,兼容很残酷!我虽然改了很多兼容包本身的bug,但是还是有个挺大的bug没有解决——指示器错位。当你在一个可以滑动的view中放着歌slider的时候,它的指示器出现的位置会根据它初次出现的位置来显示,也就是说如果你把它滚动了,那么它的指示器还是会傻傻的根据它原来的位置进行显示,而不会根据你滚动的新位置进行显示。原因是什么呢?其实很简单,指示器就是个dialog,和拖动条完全是独立的控件,指示器显示完毕后就死了,而拖动条还在。所以如果没处理好指示器和拖动条的关系,就可能会出现错位的问题。这点我最近看看能不能修复,错误的位置在Utils.java中,大家可以去自己修复看看。(已修复)

一、将其导入自己的工程中

首先还是下载lib,然后添加支持,并且写好命名空间。

我维护的:https://github.com/shark0017/MaterialDesignLibrary

原作者版本:https://github.com/navasmdc/MaterialDesignLibrary

大家可以选择一个下载,我维护的版本可能会修改上面提到的错位的bug,原作者的版本不知道会不会融合我的代码,原作者的版本的好处就是可能会持续更新,但我看这个作者也挺懒的,总之大家可以相互借鉴吧。

添加lib支持后我们就可以用这个控件了,放入布局文件前还是要写命名空间的。

xmlns:app="http://schemas.android.com/apk/res-auto"

然后放上这个控件就好了

    <com.gc.materialdesign.views.Slider
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" />

这里需要注意的是,上面那个小球和实际的小球完全是不一样的,我这里仅仅是为了大家在编译器中预览而弄了个小球上去,仅仅方便大家直观的看效果。

实际效果:

二、在布局文件中设置各种属性

app:showNumberIndicator="true"   是否在滑动时显示指示器

android:background="#ff0000"  设定背景颜色,也就是滑动条颜色

app:thumbSize="30dp"   设置滑动圆球的大小,其实按住后圆球扩大的大小也是可以设置的。但我感觉点击后放大就是为了告诉用户你已经按住了这个拖动球,用默认的就完全能实现这个效果,当你的圆球设置的较大后,那个点击后出现的放大效果就看不到了(不是没有,而是因为叠加而看不见),也因为你的圆球已经足够大了,所以也没必要给用户什么指示了。所以这个我就没去做设置。

app:value="35"   初始的value,如果你的max小于你指定的value,那么初始直接会显示max的值

三、通过代码进行各种设定,包括监听事件

public class SliderTest extends ActionBarActivity {

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.slider); Slider slider = (Slider)findViewById(R.id.slider);
slider01.showNumberIndicator(true);// 设置推动时显示指示器 slider.setBackgroundColor(0xffff0000);// 背景颜色 slider.setValue(40);// 设定初始进度 slider.setBackgroundColor(getResources().getColor(R.color.orange));// 背景颜色// 监听进度
slider.setOnValueChangedListener(new OnValueChangedListener() { @Override
public void onValueChanged(int value) {
// TODO 自动生成的方法存根
System.out.println("now value = "+ value);
}
}); slider.setThumbSize(30);// 设置滑块的大小 slider.setValue(35, false);// 在线程中设定初始进度,如果为true,那么就是在线程中跟新,可能会慢一些。
}
}

四、间续滑块(Discrete Slider)

这个其实就是分段式滑块了,这个东东可以参考这篇文章中的做法(要做点小修改),适合于有多个选择值的情况。顺便说一句,google涉及的指示器好难看啊,一个倒水滴状真心丑。而且对于这种有分段值的拖动条,本身就那么几个值,你出来什么指示器啊,完全没意义。

文章地址:http://www.cnblogs.com/tianzhijiexian/p/4044086.html

今天看到有开源的项目已经做好了MD风格的分段式滑动条了,分享下项目的地址:

https://github.com/oli107/material-range-bar

其实它就是根据上文中项目改的,所以对比看看。

Material Designer的低版本兼容实现(十二)—— Slider or SeekBar的更多相关文章

  1. Material Designer的低版本兼容实现(二)—— Theme

    Theme material主题可以定义为如下形式: @android:style/Theme.Material @android:style/Theme.Material.Light @androi ...

  2. Material Designer的低版本兼容实现(一)—— 简介 & 目录

    很长一段时间没写东西了,其实是因为最近在研究Material Designer这个东西,熬夜熬的身体也不是很好了.所以就偷懒没写东西,这回开的这个系列文章是讲如何将Material Designer在 ...

  3. Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat

    extends:http://www.cnblogs.com/tianzhijiexian/p/4087917.html 本文是对API中的方法做了介绍,如果想要看如何让这些方法兼容4.x或2.x可以 ...

  4. Material Designer的低版本兼容实现(十)—— CheckBox & RadioButton

    ChekBox的用途我们就不必多说了,算是一个很古老的控件了,何其类似的还有RadioButton,这个东西因为我目前还没写出来,所以用了别人的一个lib,这下面会说到.顺便说一句,如果你的app是在 ...

  5. Material Designer的低版本兼容实现(三)——Color

    在Material Designer中,色彩再一次被摆到了重要的位置上.官方文档中竟然给出了500种配色方案进行选择.就是为了给不同的手机.电视.手表上带来一直的用户体验. 更多用于控制色彩的属性,可 ...

  6. Material Designer的低版本兼容实现(十四)—— CardView

    今天说的又是一个5.0中才有的新控件——CardView(卡片视图).这个东东其实我们早就见过了,无论是微博还是人人客户端,它都有出现.通常我们都是通过自定义一个背景图片,然后通过给layout进行设 ...

  7. Material Designer的低版本兼容实现(十三)—— ProgressBar

    进度条我们都很常见了,新的设计规范中提出了各式各样的进度条,本篇就会介绍大部分进度条的实现.实现方式和规范的示例图可能略有差异,还是那句话根据具体需求进行改变吧. PS:本文较长 参考文档:http: ...

  8. Material Designer的低版本兼容实现(十一)—— Switch

    5.0中的switch和之前完全不同了,漂亮不漂亮咱们另说,总之4.x上是没有这样的效果了.实现方式有两种,一种是用这个兼容包来做类似的效果,一种是用传统的checkbox来代替.我感觉兼容包的效果是 ...

  9. Material Designer的低版本兼容实现(九)—— Float Button & Small Float Button

    5.0一个新特性就是出现了这么一个圆形的悬浮指示按钮,这个按钮可以用来体现一个全局的重要功能,比如添加账户什么的.这个按钮有两种大小,一种是正常的按钮大小,一种是小型的按钮.官方文档中介绍的是小心的按 ...

随机推荐

  1. 使用Golang编写优化算法 (1)

    动手写点东西是学习新知识很重要的一个阶段.之前用 Python 和 JavaScript 实现优化算法,现在用 Golang 来实现.语法上略有不爽,某些C语言的思维又回来了. - Golang 用 ...

  2. 【LOJ】#2549. 「JSOI2018」战争

    题解 仔细分析了一下,如果写个凸包+每次暴力半平面交可以得到70分,正解有点懵啊 然后用到了一个非常结论,但是大概出题人觉得江苏神仙一个个都可以手证的结论吧.. Minkowski sum 两个凸包分 ...

  3. shared_ptr(作为局部变量返回)

    智能指针:shared_ptr 1.一个局部的shared_ptr 作为返回值过程:当shared_ptr 被创建的时候,自身的引用计数 +1,当前引用计数为 1 , 按值返回以后 引用计数 + 1 ...

  4. 003.LVM扩容

    一 LVM扩容步骤 创建分区 创建PV 扩容VG 扩容LV 载大小 二 创建分区 使用分区工具(如fdisk等)创建LVM分区,却将分区标识为LVM的分区类型8e. [root@kauai ~]# f ...

  5. Java 类的继承详解

    /*文章中用到的代码只是一部分,需要完整代码的可通过邮箱联系我1978702969@qq.com*/ 在面向对象的语言中如C++和JAVA,都有一个比较重要的机制——类的继承.这里将对JAVA中的类的 ...

  6. codevs 水过 骑马修栅栏

    [问题描述] 农民John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个一个栅栏.你必须编一个程序,读入栅 ...

  7. Codeforces.838D.Airplane Arrangements(思路)

    题目链接 \(Description\) 飞机上有n个位置.有m个乘客入座,每个人会从前门(1)或后门(n)先走到其票上写的位置.若该位置没人,则在这坐下:若该位置有人,则按原方向向前走直到找到空座坐 ...

  8. hashCode()方法与equals()方法

    摘自别人的评论:http://blog.csdn.net/fhm727/article/details/5221792 当向集合Set中增加对象时,首先集合计算要增加对象的hashCode码,根据该值 ...

  9. Codeforces Round #396 (Div. 2) C. Mahmoud and a Message dp

    C. Mahmoud and a Message 题目连接: http://codeforces.com/contest/766/problem/C Description Mahmoud wrote ...

  10. 微信小程序swiper高度自适应,swiper的子元素高度不固定

    小程序 swiper 组件默认高度150px,并且如果子元素过高,swiper不会自适应高度 解决方案一: (总体来说不够完美,适合满屏滑动) 如果不是满屏的状态,用scroll-view IOS滑动 ...