搜档网
当前位置:搜档网 › android UI 之 竖直的seekBar 及 自定义背景和thumb对齐问题

android UI 之 竖直的seekBar 及 自定义背景和thumb对齐问题

android UI 之 竖直的seekBar 及 自定义背景和thumb对齐问题
android UI 之 竖直的seekBar 及 自定义背景和thumb对齐问题

android UI 之竖直的seekBar 及自定义背景和thumb对齐问题(换一种方式思考)

这个问题真的很蛋疼,网上也都是一群转来转去的文章。都是只做了简单的效果,根本不能用的,并且漏洞百出,一重新自定义就出问题。小纠结了一下。

需求前提:省事儿、快;

Ps:我java功底不错,但是做android才一个月,项目没有时间给你去细细研究seekbar是怎么绘制的,或者彻底的重写一个,而不是网上这一群转来转去的旋转90°。不过不可否认的是我也是这么用的,因为我不想把逻辑全部放在代码里去实现,因为另一种方式会来得更快一些,下边告诉你我是怎么解决的。我只想快点结束这个东西,然后就可以真正接触到有含量的东西,而不是单单停留在android的应用层。这个搞定应该就可以接触到jni,核心逻辑用c实现了,期待,OK上解决方案。

先来一张我做的demo的效果图:

用pad test的程序,横屏。

整个工代码附在下边的下载链接,急用的跳过直接下载去用。

代码小做说明,直接网上down的demo,因为这些没有必要自己重写,浪费青春,加入了自定义thumb起始位置调整的备用函数,在代码中注释掉了,默认是thumb在下边,及起始位置0在下端,需要调为上边的直接改用注释掉的函数trackTouchEvent,和onDraw中注释掉的那两行。

然后是问题核心,单纯的色彩做背景和用默认的thumb显示还算正常。不过一自定义,就会出现各种不愉快,被遮盖了,对不齐了,什么的。网上的各种调整方案针对横着的seekbar

是非常完美的,但是对于竖着的就纠结了。因为只是进度条和thumb还有事件获取的数据进行了转换,原有的seekbar,就是从系统继承而来的都是横着的,比如背景了宽高的控制了,这些也有重写的话,估计得画上一段时间,我不想这么做,估计你也不想吧。

网上找了一通,没一个相关的解决文章。最后,我把为题全推给了图片。也就是说既然它对不齐,我就按照现在的对齐关系,对齐,而给用户看的只是UI,UI只是绘制出来得图片。所以我不用代码来解决,用图片,我把seekbar的背景图左右多加了5像素作用的透明像素(前提要是PNG图片)。对齐时肯定是以图片的边界对齐的,加宽的像素填充了原来丑陋的对齐,OK,完美显示,并且不会出现偏移什么的,因为你还可以用android:paddingTop="1dip" 来简单的控制,可以应对简单的需求调整。

其他问题:

Q: 有人会问了,“我做的背景怎么是横着出来的?”,因为代码让它转来90°呀~亲。这时候,又来问题了,“那我怎么让它转回来呢?”。

A:程序猿的小幼稚就是习惯了用代码来解决问题,哪怕是南辕北辙,哪怕是绕了弯道,还是把自己的思想所在程序里。我想说的是你找美工来,让她帮你把图片旋转90°,在ps里也就是一个快捷键,可能耗时不到1s,而你却抱着程序在想以什么样的逻辑来不让背景也跟着seekbar旋转。半天过去了,你还是没有解决。明白我的意思么

============================================================

Q:这个给图片加透明像素实现貌似很山寨,就是在那里拼凑UI的嚒?!

A:呵呵,bingo。答对了,UI就是拼凑出来的。如果你还是想以代码来完美实现,那么你只会是两种人之一:1、可能是个追求完美的Geek 2、不懂前端UI的真谛。界面本来就是骗人的,给人绘制一种操控的假象,完成一系列操控的动作,反馈程序的状态。

============================================================

思路是这么来的:

因为网上有人在问,我的seekbar为了不让thumb到两端时没覆盖掉一部分,设置了android:thumbOffset="0dip" ,但是为什么一设置就没办法把thumb拖动到两端的最顶头了呢?呵呵,起始是这样的,设置这个属性以后,两端是以图片的边界进行对齐的,一般的thumb好多是圆形的或者其他,前台做图片时会留下透明像素,这样,透明像素也占用了对齐空间,给用户的感觉是没有到达顶端,世界已经对齐了。

既然单纯的图片的问题可以使你的程序不完美,那它也绝对可以使你的程序完美,看你怎么思考了。

OK,到此为止,继续工作。

相关主题