蛋疼的ViewPager+竖直SeekBar实现过程(1)竖直SeekBar实现
来源:互联网 发布:文华财经交易模型源码 编辑:程序博客网 时间:2024/05/17 22:42
要实现的功能:要实现的功能viewPager包含三个界面,其中一个界面包含竖直SeekBar,然后有开关控制删除viewPager的第一个或者第三个界面。
单独实现竖直SeekBar不难,单独ViewPager+三个界面也容易,包含竖直SeekBar的 viewPager看起来也easy,但实际上可能遇到的问题比想象中多的多...
1.实现竖直SeekBar
public class BrightnessSeekBarView extends SeekBar{ private Context mContext; private Drawable mDrawable; public BrightnessSeekBarView(Context context, AttributeSet attrs, int defStyle){ super(context, attrs, defStyle); } public BrightnessSeekBarView(Context context, AttributeSet attrs){ super(context, attrs); mContext = this.getContext(); } public BrightnessSeekBarView(Context context){ super(context); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh){ super.onSizeChanged(h, w, oldh, oldw); } @Override protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ super.onMeasure(heightMeasureSpec, widthMeasureSpec); setMeasuredDimension(getMeasuredHeight(),getMeasuredWidth());// setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); } @Override protected synchronized void onDraw(Canvas canvas){ canvas.rotate(-90); canvas.translate(-getHeight(), 0); super.onDraw(canvas); } @Override public boolean onTouchEvent(MotionEvent event){ if (!isEnabled()){ return false; } setSelfProgress(event.getY()); switch (event.getAction()){ case MotionEvent.ACTION_DOWN: setSelected(true); break; case MotionEvent.ACTION_MOVE: setSelected(true); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: setSelected(false); break; } return true; } private void setSelfProgress(float yDistance ){ setProgress(getMax() - (int) (getMax() * yDistance / getHeight())); invalidateSelf(); } public void invalidateSelf(){ onSizeChanged(getWidth(), getHeight(), 0, 0); }}Ok,已经实现出来了(布局文件什么的就不说了,网上搜android 自定义seekbar一大坨),在手机上跑一跑,如下图
手指在Thumb上滑动下,很顺畅,我们用一个按钮来控制下该 seekbar的 progress,点击逻辑如下:
mSeekBarView.setProgress(50);//假定该seekbar的Max值为 100 ,则 50就是它的一半,好 的,我点击了下,尼玛什么情况?
progress是正确了没错,但是为毛Thumb在下面不动了啊!!!
找原因吧我们知道(查看源码)SeekBar-->AsSeekBar,在AsSeekBar中有updateThumbPos()方法,该方法为对Thumb Drawable位置的更新,那哪些地方会调用这个方法呢?有两个地方
A.在AsSeekBar中的onSizeChanged()方法会 调用到 updateThumbPos()方法
B.查找源码,主要是在AsSeekBar和ProgressBar中的源码发现,setProgress时也会调用该方法,但是为什么竖直seekBar中没有刷新Thumb的位置就不得而知了
ok,有这两个地方调用,第二个又不给力,就 手动调用第一个了,修改点击逻辑为
mSeekBarView.setProgress(i); mSeekBarView.invalidateSelf();在点击按钮就正常了
0 0
- 蛋疼的ViewPager+竖直SeekBar实现过程(1)竖直SeekBar实现
- 蛋疼的ViewPager+竖直SeekBar实现过程(2)可删除增加页面ViewPager实现
- 蛋疼的ViewPager+竖直SeekBar实现过程(3)组合后出现的问题
- 竖直的seekbar
- android 竖直的seekbar
- android手机上实现竖直seekbar的EQ均衡器
- 自定义竖直方向的seekbar(一)
- 完美版 竖直的SeekBar
- 自定义竖直Seekbar
- 自定义竖直seekbar
- android竖直seekbar
- 竖直的完美seekbar,无缝拖动!
- 竖直方向的ViewPager的实现方式
- Android自定义竖直方向SeekBar
- 自定义 viewpager, 实现竖直viewpager效果
- android 简单实现viewpager竖直滑动
- 元素竖直居中的实现
- 竖直ViewPager
- Activiti工作流简介
- NC(NetCat)命令详解
- HDU 3549 Flow Problem
- 64位的linux装的hadoop是32位的,需要手工编译
- hdu-1031-Design T-Shirt
- 蛋疼的ViewPager+竖直SeekBar实现过程(1)竖直SeekBar实现
- 斥巨资打造鹰目LED联播网
- stm32 利用Flash进行储存数据
- 给IT新人的15点建议:苦逼程序员的辛酸反省与总结
- 从4.0.4 master分支移植到4.0.4_r1
- Mozilla / Firefox / Gecko in VB.NET,geckofx 1.9 vb.net中使用方法
- 鸟哥教会我的一些命令
- 如何将decimal保留小数位后两位,使用四舍五入,利用时间差计算部分时间
- Activating Change Pointers