成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

Android實現(xiàn)帶節(jié)點的進度條

瀏覽:167日期:2022-09-25 13:22:03

日常的開發(fā)中經(jīng)常會需要用到自定義View,這次剛好有個需求,需要用到帶有節(jié)點的進度條。東西很簡單直接繼承View就行了。

Android實現(xiàn)帶節(jié)點的進度條

首先定義一些需要的屬性

/** * 背景畫筆 */ private Paint bgPaint; /** * 前景畫筆 */ private Paint forePaint; /** * 選中畫筆 */ private Paint selectPaint; /** * 未選中畫筆 */ private Paint unselectPaint; /** * 背景顏色 */ private int bgColor = Color.parseColor('#9C9C9C'); /** * 前景顏色 */ private int foreColor = Color.parseColor('#8A2BE2'); /** * 默認高度 */ private int defaultHeight; /** * 節(jié)點文字 */ private List<String> nodeList; private List<Rect> mBounds; /** * 節(jié)點圓的半徑 */ private int radius; /** * 文字和節(jié)點進度條的top */ private int marginTop; /** * 兩個節(jié)點之間的距離 */ private int dividWidth; /** * 選中位置 */ private int selectIndex;

然后在構(gòu)造方法中初始化這些數(shù)據(jù)

private void init(Context context) { radius = SizeUtils.dp2px(context,4); defaultHeight = SizeUtils.dp2px(context,30); marginTop = SizeUtils.dp2px(context,5); bgPaint = new Paint(Paint.ANTI_ALIAS_FLAG); bgPaint.setColor(bgColor); bgPaint.setStyle(Paint.Style.FILL); forePaint = new Paint(Paint.ANTI_ALIAS_FLAG); forePaint.setColor(foreColor); forePaint.setStyle(Paint.Style.FILL); unselectPaint = new Paint(Paint.ANTI_ALIAS_FLAG); unselectPaint.setColor(bgColor); unselectPaint.setTextSize(SizeUtils.sp2px(context,10)); selectPaint = new Paint(Paint.ANTI_ALIAS_FLAG); selectPaint.setColor(foreColor); selectPaint.setTextSize(SizeUtils.sp2px(context,10)); }

設(shè)置節(jié)點文字

/** * 設(shè)置數(shù)據(jù) * @param nodeDatas */ public void setNodeList(List<String> nodeDatas){ if(nodeDatas != null){ nodeList = nodeDatas; } //測量文字所占用的空間 measureText(); } /** * 設(shè)置選中位置 * @param selectIndex */ public void setSelectIndex(int selectIndex){ this.selectIndex = selectIndex; invalidate(); }/** * 測量文字的長寬 */ private void measureText(){ mBounds = new ArrayList<>(); for (int i = 0; i < nodeList.size(); i++) { Rect mBound = new Rect(); unselectPaint.getTextBounds(nodeList.get(i),0,nodeList.get(i).length(),mBound); mBounds.add(mBound); } }

最后重要的步驟,開始在onDraw中繪制節(jié)點進度條和繪制文字

1、繪制灰色背景線條

if(nodeList == null || nodeList.isEmpty()){ return; } bgPaint.setStrokeWidth(radius/2); //繪制灰色的背景線條 canvas.drawLine(radius,radius,getWidth()-radius,radius,bgPaint);

2、繪制節(jié)點上的圓和兩個節(jié)點之間的間隔線條

//畫節(jié)點圓 //每個圓相隔的距離 dividWidth = (getWidth()-radius*2)/(nodeList.size() - 1); forePaint.setStrokeWidth(radius/2); for (int i = 0; i < nodeList.size(); i++) { if(i == selectIndex){ for (int j = 0; j <= i; j++) { canvas.drawCircle(radius+ j * dividWidth, radius, radius , forePaint); canvas.drawLine(radius,radius,j*dividWidth,radius,forePaint); } }else if(i>selectIndex){ canvas.drawCircle(radius + i * dividWidth, radius, radius, bgPaint); } }

3、繪制節(jié)點上的文字

for (int i = 0; i < nodeList.size(); i++) { int currentTextWidth=mBounds.get(i).width(); if (i==0){ if (i==selectIndex){ canvas.drawText(nodeList.get(i), 0, radius*2 + marginTop + mBounds.get(i).height()/2, selectPaint); }else if(i>selectIndex) { canvas.drawText(nodeList.get(i), 0, radius*2 + marginTop + mBounds.get(i).height()/2, unselectPaint); } }else if (i==nodeList.size()-1){ if (i==selectIndex){ for (int j = 0; j <= i; j++) { if(j == 0){ canvas.drawText(nodeList.get(j), 0, radius*2 + marginTop + mBounds.get(j).height()/2, selectPaint); }else if(j == i){ canvas.drawText(nodeList.get(j), getWidth() - currentTextWidth, radius*2 + marginTop + mBounds.get(j).height()/2, selectPaint); }else{ canvas.drawText(nodeList.get(j), radius + j * dividWidth - currentTextWidth / 2, radius*2 + marginTop + mBounds.get(j).height()/2, selectPaint); } } }else if(i>selectIndex) { canvas.drawText(nodeList.get(i), getWidth() - currentTextWidth, radius*2 + marginTop + mBounds.get(i).height()/2, unselectPaint); } }else { if (i==selectIndex){ for (int j = 0; j <= i; j++) { if(j>0){ canvas.drawText(nodeList.get(j), radius + j * dividWidth - currentTextWidth / 2, radius*2 + marginTop + mBounds.get(j).height()/2, selectPaint); }else{ canvas.drawText(nodeList.get(j), 0, radius*2 + marginTop + mBounds.get(j).height()/2, selectPaint); } } }else if(i>selectIndex) { canvas.drawText(nodeList.get(i), radius + i * dividWidth - currentTextWidth / 2, radius*2 + marginTop + mBounds.get(i).height()/2, unselectPaint); } } }

有時候可能需要的是下面這種進度條

Android實現(xiàn)帶節(jié)點的進度條

只需要修改onDraw中繪制節(jié)點圓和文字的方法就可以了

for (int i=0; i < nodeList.size();i++) { if (i==selectIndex){ canvas.drawCircle(radius+ i * dividWidth, radius, radius , forePaint); }else { canvas.drawCircle(radius + i * dividWidth, radius, radius, bgPaint); } } for (int i=0; i<nodeList.size();i++){ int currentTextWidth=mBounds.get(i).width(); if (i==0){ if (i==selectIndex){ canvas.drawText(nodeList.get(i), 0, radius*2 + marginTop + mBounds.get(i).height()/2, selectPaint); }else { canvas.drawText(nodeList.get(i), 0, radius*2 + marginTop + mBounds.get(i).height()/2, unselectPaint); } }else if (i==nodeList.size()-1){ if (i==selectIndex){ canvas.drawText(nodeList.get(i), getWidth() - currentTextWidth, radius*2 + marginTop + mBounds.get(i).height()/2, selectPaint); }else { canvas.drawText(nodeList.get(i), getWidth() - currentTextWidth, radius*2 + marginTop + mBounds.get(i).height()/2, unselectPaint); } }else { if (i==selectIndex){ canvas.drawText(nodeList.get(i), radius + i * dividWidth - currentTextWidth / 2, radius*2 + marginTop + mBounds.get(i).height()/2, selectPaint); }else { canvas.drawText(nodeList.get(i), radius + i * dividWidth - currentTextWidth / 2, radius*2 + marginTop + mBounds.get(i).height()/2, unselectPaint); } } }

點擊節(jié)點進行節(jié)點切換

// 實現(xiàn)節(jié)點切換,把注釋打開就行了@Override public boolean onTouchEvent(MotionEvent event) { float eventX; float eventY; int i = event.getAction(); if (i == MotionEvent.ACTION_DOWN) { } else if (i == MotionEvent.ACTION_MOVE) { } else if (i == MotionEvent.ACTION_UP) { eventX = event.getX(); eventY = event.getY(); //計算選中的index float select = eventX / dividWidth; float xs = select - (int) (select); //selectIndex = (int) select + (xs > 0.5 ? 1 : 0); } //invalidate(); return true; }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Android
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
久久综合图片| 欧美午夜电影在线播放| 最新日韩在线视频| 国产欧美日韩精品一区| 亚洲欧洲精品天堂一级| 亚洲在线成人精品| 亚洲一区二区欧美日韩| 美腿丝袜亚洲色图| yourporn久久国产精品| 亚洲日产国产精品| 91成人国产精品| 精品视频123区在线观看| 精品国产污网站| 亚洲欧美日韩成人高清在线一区| 亚洲精选一二三| 天天色综合天天| 成a人片国产精品| 伊伊综合在线| 欧美日韩黄色一区二区| 精品女同一区二区| 国产嫩草影院久久久久| 久久精品免费观看| 国产欧美日韩一区| 日韩一区二区视频| 亚洲va国产va欧美va观看| 91女厕偷拍女厕偷拍高清| 久久久久.com| 最新热久久免费视频| 国产一区二区三区四| 在线播放精品| 欧美va在线播放| 久久精品二区亚洲w码| 国产亚洲第一区| 国产精品丝袜91| 成人综合婷婷国产精品久久蜜臀| 色欧美88888久久久久久影院| 91亚洲国产成人精品一区二三| 日韩高清一区在线| 亚洲无线码一区二区三区| 粉嫩一区二区三区在线看| 欧美国产日产图区| 欧美在线观看视频一区二区三区| av亚洲精华国产精华| 亚洲视频中文字幕| 91精品一区二区三区久久久久久| 成人av动漫在线| 老汉av免费一区二区三区 | 有坂深雪av一区二区精品| 欧美日本不卡视频| 激情综合网天天干| 精品久久久久一区二区国产| 久久精品国产清高在天天线| 97精品电影院| 久久福利视频一区二区| 亚洲欧美另类小说视频| 久久精品人人做人人综合| 91精品国产高清一区二区三区 | 日本欧美在线看| 欧美日韩国产免费一区二区| 9i看片成人免费高清| 午夜日韩在线电影| 欧美电视剧免费观看| 国产日产精品一区二区三区四区的观看方式 | 国产精品hd| 久久不射网站| 夜夜嗨av一区二区三区中文字幕| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩欧美三级在线| 2欧美一区二区三区在线观看视频| 日韩欧美国产一区二区在线播放| 67194成人在线观看| 日韩精品专区在线| www日韩大片| 国产aⅴ综合色| 国产农村妇女毛片精品久久莱园子| 欧美精品一区二区精品网| 日韩和欧美一区二区| 国产一区二区免费在线| 久久综合九色综合网站| 久久亚区不卡日本| aa级大片欧美| 欧美三电影在线| 一区二区三区在线视频观看58| 国产福利不卡视频| 欧美日韩成人| 免费日韩av片| 国产精品三级视频| 日韩影院免费视频| 欧美一区视频| 久久久精品蜜桃| 精品视频1区2区3区| 久久www免费人成看片高清| 成人h动漫精品一区二区| 国产福利一区二区| 亚洲人成毛片在线播放女女| 亚洲精品视频免费观看| 91麻豆精品国产91久久久资源速度 | 欧美国产成人精品| 久久久久久九九九九| 99久久久国产精品| 国产午夜精品一区二区| 亚欧色一区w666天堂| 国产综合网站| 久久久国产精品不卡| 99精品欧美一区二区蜜桃免费 | 18欧美乱大交hd1984| 欧美另类一区| 日韩福利电影在线| 91亚洲精华国产精华精华液| 欧美日韩国产一级| 亚洲成人资源在线| 国产iv一区二区三区| 成人高清av在线| 欧美日韩视频第一区| 国产曰批免费观看久久久| 色香蕉久久蜜桃| 国产精品视频yy9299一区| 久久久久久久网| 国产精品久久久久久一区二区三区 | 久久久久中文| 一区二区日韩av| 99精品欧美| 亚洲男人的天堂一区二区| 欧美黄污视频| 久久久久九九视频| 一区在线播放视频| 一级特黄大欧美久久久| 日韩主播视频在线| 免费观看30秒视频久久| 国产精品一卡二| 欧美福利电影在线观看| 日韩亚洲欧美精品| 在线一区二区视频| 日韩欧美一区二区视频| 国产日产精品一区| 亚洲综合在线观看视频| 无码av免费一区二区三区试看 | 一区二区av| 可以免费看不卡的av网站| 欧美日韩另类一区| 国产午夜精品理论片a级大结局| 亚洲精品中文在线| 蜜桃视频在线一区| 99精品久久久久久| 国产精品腿扒开做爽爽爽挤奶网站| 欧美性生活一区| 久久亚洲综合av| 亚洲午夜久久久| 国产成人av电影在线播放| 亚洲丰满在线| 欧美日韩一二区| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲午夜久久久| 国产高清不卡一区二区| 激情综合中文娱乐网| 欧美性猛片xxxx免费看久爱| 久久久91精品国产一区二区精品| 亚洲在线视频一区| 高清在线不卡av| 9色精品在线| 日韩一区二区三区视频在线观看| 中文字幕亚洲欧美在线不卡| 精品一区二区三区免费观看| 欧美三级网页| 在线视频一区二区三区| www亚洲一区| 一区二区三区免费网站| 久久99久久久久| 国自产拍偷拍福利精品免费一 | 午夜精品久久久久影视| 成人免费高清视频| 国产一区二区三区精品视频| 久久嫩草精品久久久精品一| 欧美日本国产精品| 亚洲香肠在线观看| 欧美激情日韩| 91污片在线观看| 中文字幕一区二区在线观看| 3atv一区二区三区| 久久亚洲精华国产精华液| 国产在线精品视频| 久久综合九色99| 一区二区三区在线观看欧美| 国产成人免费在线观看| 久久九九精品| 国产精品久久久久久户外露出 | 国产aⅴ精品一区二区三区色成熟| 91首页免费视频| 欧美在线你懂的| 欧美zozo另类异族| 天堂va蜜桃一区二区三区漫画版| 午夜影视日本亚洲欧洲精品| 午夜精品久久一牛影视| 日本一区二区不卡视频| 久久久不卡影院| 亚洲制服欧美中文字幕中文字幕| 亚洲国产三级在线| 亚州成人在线电影| 亚洲精品国产a| 亚洲图片你懂的|