一、由于android只定义了横着的SeekBar,所以竖着的SeekBar要由我们自己自定义,现在我来谈谈我自己自定义竖着的SeekBar的做法

竖着的SeekBar有分方向向上和向下,不过代码的区别不是很大,下面会细讲。

步骤:

1、首先要新建一个类来继承AbsSeekBar,类里面再自定义一个监听器接口,比如:OnSeekBarChangeListener(这个名字可以自己定义,我这样只是为了方便)

这个接口里也写三个方法onProgressChanged(SeekBar VerticalSeekBar, int progress,boolean fromUser),onStartTrackingTouch(SeekBar VerticalSeekBar),onStopTrackingTouch(SeekBar VerticalSeekBar)

首先先看android 自带的SeekBar的原理代码

所以根据android自己自带的SeekBar,我们也可以这样定义自己的竖着的SeekBar,但是我要做的是竖着的SeekBar,所以除了它有的这些方法外,我们还要让thumb上下滑动,所以还要有onTouchEvent(),trackTouchEvent(),onProgressRefresh(),setThumbPos()等一些方法。

onTouchEvent()是在View中就有定义的方法,(touch)事件处理我日后有空我会再发文章讨论,现在我们只要知道,在用户触摸seekbar(absseekbar)时,这个方法会响应touch事件就够了。onTouchEvent()会判断用户的动作,然后调用前述的一些方法(注意去看代码),注意它调用的顺序,判断是ACTION_DOWN时先调用onStartTrackingTouch()再调用trackTouchEvent(event),于是在你的程序中定义的 onStartTrackingTouch()先执行了;判断是ACTION_UP时先调用trackTouchEvent(event)再调用onStopTrackingTouch(),至于为什么我就不啰嗦了,有时候这个顺序是很重要的。

trackTouchEvent()根据touch的位置来设置进度,它计算出progress后调用setProgress(),setProgress()是progressbar中实现的方法。

当seekbar的progress改变时onProgressRefresh()会被调用,它会调用setThumbPos()来设置thumb的位置。

现在我们知道,seekbar拥有的progressbar之外的功能,都是在absseekbar中实现的。系统默认seekbar是横着的,在absseekbar中计算progress、计算thumb的位置,用到了seekbar的宽和高,我们只要改变一下计算方法就能计算出竖着的seekbar所需要的各个数值。例如:

2、我们如何画出来一个竖着的seekbar呢?

一是自己画,也就是自己写个draw,太难,而且很难和系统风格统一。另外一个办法是让系统给我们画。verticalseekbar只是seekbar转了90度或-90度,我们可以把画布转一个角度,然后交给系统去画,具体的做法就是在ondraw()时调整画布,然后调用super.onDraw()。

这个调整也就是旋转和平移。至于旋转和平移的具体实现,我跟到native部分就没有看下去了,也没有看到具体的介绍。我的理解,你要保证画布的左上角在旋转平移以后坐标不变,否者会出现很多问题。 就我们的seekbar而言,如果你要获得一个向上增长的seekbar,那么代码应该是:

注意:

一个View在屏幕上画出来,首先measure()会被调用,这是个final方法,measure()会调用onMeasure()。你可以重写onMeasure(),但是重写的onMeasure()中必须调用setMeasuredDimension(int,int), setMeasuredDimension()会保存该View的长和宽。我们可以重写onMeasure()方法给我们的seekbar分配一块竖直的,长宽由我们设定的区域。在画seekbar之前,我们把这个区域旋转了90度交给系统,系统给我们画一个标准的seekbar,在整个layout中,这个seekbar就成竖直的了。

实际操作时,我们在工程中新建了类verticalSeekbar,把framework中seekbar的代码拷贝过来,做一些必须的修改(类名、构造方法什么的)。注意如果我们的verticalseekbar是在XML中定义的,在代码中使用findViewById()方法来获得,系统将使用第二个构造方法(我简单地试了一下,没有看到官方资料或权威的解释),也就是

public SeekBar(Context context, AttributeSet attrs) {
        this(context, attrs, com.android.internal.R.attr.seekBarStyle);
    }

com.android.internal.R.attr.seekBarStyle在我我们的应用程序中是无法使用的,你可以换成android.R.attr.seekBarStyle,你也可以自己定义一个,但是必须包含系统本身的。

最后代码实现:

方向向上的示例图:

方向向下的示例图:

自定义竖着的SeekBar相关推荐

  1. android遥控杆控件,Android自定义滑杆控件SeekBar多功能版本

    在应用开发中有没有遇到过通过滑杆控件选择一些区间条件实现参数变化?今天我们就来自定义View实现一个多功能又实用的版本SeekBar. Paste_Image.png ](http://upload- ...

  2. Android——自定义带刻度的SeekBar单向拖动条

    时间过得真快,才发现好久没来逛逛了.没写博客的这段时间一直在做项目,连续完成了两个大型app,这个过程很享受,这是独立开发的,所以中途有很多很多的问题需要自己一个一个的去解决,现在接近尾声了,发现自己 ...

  3. 自定义View 实现圆形seekbar (音量旋钮)

    自定义圆形seekbar 在做一个音频的项目,想在网上找一个圆形aseekbar,但是一直没找到合适的,只好自己动手写了,上网找了一个demo进行了大修改效果如下 效果图 废话不多说,直接上源码,不懂 ...

  4. Android开发之如何自定义垂直方向的SeekBar

    SeekBar进度条在项目开发过程中使用的太频繁了,比如媒体播放器当前播放的时间进度等.那么今天将对seekbar的使用做一个总结,后面写工作要用到直接过来copy就好.这边seekbar的使用分为横 ...

  5. 教你自定义竖直跑马灯效果(广告专用)

    最近因为项目需要,写了一个跑马灯效果的控件,过程中也学到一些东西,在这里和大家分享一下. 首先让我们来看一下效果: 其中的图标,文字,甚至每行的整个布局都是可以自定义的,我们可以使用整个控件很方便做出 ...

  6. 自定义带标尺的seekbar

    前言 第一次书写技术类的文章,希望能够将自己的所学和成长记录下来. 内容 由于公司的项目需要,需要制作一个指针滑动的seekbar,如图. 查阅了网上大量的相关实例和知识,在此进行一个总结,如有问题希 ...

  7. 自定义漂亮的Android SeekBar样式

    系统自带的SeekBar真是太难看了,不能容忍! 只能自己做了,先来张效果图 第1个Seekbar 背景是颜色,thumb是图片,上代码: <SeekBarandroid:id="@+ ...

  8. android 自定义带刻度的seekbar,[Android开发]仿天天P图带气泡显示百分比进度的自定义SeekBar...

    仿天天P图图像美化修改工具,素材来自于天天P图,效果图 效果就是点击之后会有气泡显示进度,优点是气泡不占用控件的高度 其他效果可参看https://github.com/AnderWeb/discre ...

  9. android 自定义 seekbar,自定义漂亮的Android SeekBar样式

    Paste_Image.png 第一个Seekbar 背景是颜色,thumb是图片,上代码: android:id="@+id/timeline" android:layout_w ...

  10. android 自定义滑块,Android自定义View实现滑块SeekBar

    话不多说先上效果图: 本篇文章实现上图的效果,主要使用canvas.drawPath(). 首先看到这张图想到的是直接画N个rect,有的实心有的空心不就完事了吗.不过这样的代码肯定是这样的1for( ...

最新文章

  1. 深度学习经典数据集汇总
  2. python基于什么语言-一种基于Python语言的EDA开发平台及其使用方法与流程
  3. JavaScript核心语法总结
  4. 聚焦国际农民丰收节贸易会-张桃林:农业谋定开放新格局
  5. Unknown SSL protocol error in connection to xxx:443
  6. Ext 入门 (05) 打印+gridpanel()方法
  7. hmac hmac.new_使用HMAC(Play 2.0)保护REST服务
  8. 与reCAPTCHA的Spring集成
  9. 模拟栈数据结构改进版(使用异常)
  10. linux sh 字符串split,linux shell之字符串的更具字符分割和删除字符和文本内容的删除以及内容是否匹配成功...
  11. 3号团队-团队任务5:项目总结会
  12. 认识![CDATA[ ]]
  13. pythonsys用法_Python 使用sys模块
  14. python实验总结与分析_Python实验报告二
  15. TCP的短链接和长连接
  16. 线性代数---二阶行列式
  17. oppo手机硬件测试软件,OPPO怎么测试手机硬件,只需要做这一步,进入工程模式...
  18. sloth(标点工具)使用说明
  19. APP推广|小众APP推广渠道,总有适合你的。
  20. Tanzu 学习系列之 TKGm 1.4 for vSphere 组件集成(1)

热门文章

  1. JDK动态代理的意义和用法
  2. 五步搞定Java性能调优(附超全技能图谱)
  3. 计算机专业基础820考什么,820计算机专业基础考纲
  4. 边缘检测之非极大值抑制原理
  5. 动力节点Docker视频教程从入门到精通
  6. 人人商城小程序消息服务器配置,人人商城小程序前端对接教程
  7. PSPnet预训练模型caffe model转pytorch
  8. IDEA配置maven本地仓库
  9. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.8
  10. python采集直播间数据_利用Python爬虫爬取斗鱼直播间信息,以及直播的实际人数!...