可以手动拖动的扇形进度条
2017-04-06 16:43
169 查看
最近公司需要做一个扇形可拖动进度条,如图:
在自定义view中有drawArc方法,可以进行画扇形,然后其中startAngle参数为设置起点,所以我们将起点设置到我们想要的角度,我设置到左下角。
sweepAngle为划过的角度,这个根据我们需要设置成我们想要的角度,
canvas.drawArc(this.mArcRectF, minRadian, mSeekBarDegree, false, mSeekbarProgressPaint);
从图中我们可以看到最外层大圈,我们需要画一个背景扇形,划过的一个扇形,和可拖动的Drawable,我们通过计算拖动的Drawable的宽高和当前扇形的弧度得出Drawable的位置。
private void setThumbPosition(double radian) {
if(DEBUG) Log.v(TAG, "setThumbPosition radian = " + radian);
double x = mSeekBarCenterX + mSeekBarRadius * Math.cos(radian);
double y = mSeekBarCenterY + mSeekBarRadius * Math.sin(radian);
// if(DEBUG) Log.v(TAG, "setThumbPosition radian = " + x + "$$$" + y);
mThumbLeft = (float) (x - mThumbWidth / 2);
mThumbTop = (float) (y - mThumbHeight / 2);
}其次就是我们需要在此view上加入手势:
@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
seekTo(eventX, eventY, false);
break ;
case MotionEvent.ACTION_MOVE:
seekTo(eventX, eventY, false);
break ;
case MotionEvent.ACTION_UP:
seekTo(eventX, eventY, true);
break ;
}
return true;
}
根据手势中的x,y计算得出我们的弧度,大致思路是这个样子,文末会有demo地址,一定要注意弧度和角度的问题。
demo地址:
https://github.com/HeinzLip/EllipseSeekbar
大家多多star,谢谢
在自定义view中有drawArc方法,可以进行画扇形,然后其中startAngle参数为设置起点,所以我们将起点设置到我们想要的角度,我设置到左下角。
sweepAngle为划过的角度,这个根据我们需要设置成我们想要的角度,
canvas.drawArc(this.mArcRectF, minRadian, mSeekBarDegree, false, mSeekbarProgressPaint);
从图中我们可以看到最外层大圈,我们需要画一个背景扇形,划过的一个扇形,和可拖动的Drawable,我们通过计算拖动的Drawable的宽高和当前扇形的弧度得出Drawable的位置。
private void setThumbPosition(double radian) {
if(DEBUG) Log.v(TAG, "setThumbPosition radian = " + radian);
double x = mSeekBarCenterX + mSeekBarRadius * Math.cos(radian);
double y = mSeekBarCenterY + mSeekBarRadius * Math.sin(radian);
// if(DEBUG) Log.v(TAG, "setThumbPosition radian = " + x + "$$$" + y);
mThumbLeft = (float) (x - mThumbWidth / 2);
mThumbTop = (float) (y - mThumbHeight / 2);
}其次就是我们需要在此view上加入手势:
@Override
public boolean onTouchEvent(MotionEvent event) {
float eventX = event.getX();
float eventY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
seekTo(eventX, eventY, false);
break ;
case MotionEvent.ACTION_MOVE:
seekTo(eventX, eventY, false);
break ;
case MotionEvent.ACTION_UP:
seekTo(eventX, eventY, true);
break ;
}
return true;
}
根据手势中的x,y计算得出我们的弧度,大致思路是这个样子,文末会有demo地址,一定要注意弧度和角度的问题。
demo地址:
https://github.com/HeinzLip/EllipseSeekbar
大家多多star,谢谢
相关文章推荐
- 设置DBGrid列可以手动设置宽度,不能拖动。
- jquery 实现一个可以手动调节的进度条
- Android 高仿 频道管理----网易、今日头条、腾讯视频 (可以拖动的GridView)附源码DEMO
- IOS可以拖动的UIButton
- winform程序中为无边框窗体手动添加窗体拖动代码
- 可以随进度显示不同颜色的css3进度条分享
- Table 可以拖动效果
- UISlider的简单使用(可拖动进度条)
- android控件可以拖动处理方法
- 可以用鼠标拖动的DIV实现思路及代码
- opengl绘制花环(点的个数可以手动输入) 源代码
- 1.CCProgressTo进度动作,条形进度条,扇形进度条
- VideoView控件可以手动改变大小
- C#创建可以随意拖动的控件,拖动窗体上的任意控件到指定位置
- Android 修复ijkPlayer进行m3u8 hls流播放时seek进度条拖动不准确的问题
- extjs滚动条超出内容可以拖动,autoScroll : false,
- java中使用poi导出excel表格数据并且可以手动修改导出路径
- flash效果展开层、关闭层,并且可以拖动层。
- android 开源项目(二)可以左右拖动删除、调换位置的的listview的 item的实现(drag-sort-listview)
- 谁说ios不可以自定义控件?(可用xib拖动的)