Android自定义控制条效果
程序员文章站
2022-09-06 10:47:47
本文实例为大家分享了android自定义控制条效果的具体代码,供大家参考,具体内容如下controlbar自定义一个可以调节大小的控件,可以根据宽高来指定控制条方向。当width >= heig...
本文实例为大家分享了android自定义控制条效果的具体代码,供大家参考,具体内容如下
controlbar
自定义一个可以调节大小的控件,可以根据宽高来指定控制条方向。当width >= heigth时,为横向控制条,否则为竖向控制条
onmeasure
根据用户给定的width与height计算控制条的坐标。
1.主要的计算思路
先计算横向的的坐标点,竖向的坐标点即横向的逆时针旋转90度再向下移一个heigth的长度。
//横向坐标点 mhorlarcfirstpathx = mradius + mlarclength; mhorlarcfirstpathy = starty + mbarheight * (1.0f - little_arc_per_width) / 2.0f ; //对应竖向坐标点 mlarcfirstpathx = mhorlarcfirstpathy; mlarcfirstpathy = -mhorlarcfirstpathx + longside;
ondraw
根据计算所得坐标点,构建路径,绘图
super.ondraw(canvas); mbgpaint.setcolor(color.white); canvas.drawpath(mbgpath, mbgpaint); mbgpaint.setcolor(color.gray); canvas.drawpath(mmaxpath, mbgpaint); canvas.drawpath(mpath, mpaint); mbgpaint.setcolor(color.white); if(mdirection == horizontal){ canvas.drawcircle(mradius + mpercent * mbarwidth, mradius, mradius, mbgpaint); canvas.drawcircle(mradius + mpercent * mbarwidth, mradius, mradius - spacing, mpaint); }else { canvas.drawcircle(mradius, mheight - (mradius + mpercent * mbarwidth), mradius, mbgpaint); canvas.drawcircle(mradius, mheight - (mradius + mpercent * mbarwidth), mradius - spacing, mpaint); }
ontouchevent
根据手指滑动,动态调整数值大小
@override public boolean ontouchevent(motionevent event) { switch (event.getaction()){ case motionevent.action_down: case motionevent.action_move: float distance = 0; float maxdist = 0; switch (mdirection){ case horizontal: distance = event.getx(); maxdist = mwidth; break; case vertical: distance = mheight - event.gety(); maxdist = mheight; break; } if(distance <= mradius){ updateview(min_value); }else if(distance >= maxdist - mradius){ updateview(max_value); }else { updateview(calculatingvalue(distance)); } return true; default: return super.ontouchevent(event); } }
实际效果如图所示
横向控制条
竖向控制条
项目
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。