日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:205日期: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;

然后在構造方法中初始化這些數(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)); }

設置節(jié)點文字

/** * 設置數(shù)據(jù) * @param nodeDatas */ public void setNodeList(List<String> nodeDatas){ if(nodeDatas != null){ nodeList = nodeDatas; } //測量文字所占用的空間 measureText(); } /** * 設置選中位置 * @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)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
另类小说一区二区三区| 鲁大师成人一区二区三区| 日韩精品一区二区三区中文在线 | 久久亚洲资源中文字| 亚洲精品极品| 国产精品亚洲综合在线观看| 国产精品色婷婷在线观看| 精品视频在线观看网站| 国产精品亚洲一区二区三区在线观看| 午夜精品久久久久久久久久蜜桃| 欧美1级日本1级| 色8久久久久| 国产一区二区三区精品在线观看| 亚洲黄色中文字幕| 欧美成人高清| 日韩av在线免费观看不卡| 精品久久久久久久| 精品一区亚洲| 日韩欧美美女在线观看| 国产精品一区二区三区av| yellow在线观看网址| 久久精品一区| 国产美女精品| 精品日本视频| 天堂成人免费av电影一区| 国产精品网站在线看| 99视频精品全国免费| 日韩在线黄色| 色88888久久久久久影院| 亚洲精品高潮| 日韩啪啪电影网| 日本91福利区| 激情综合自拍| 国产精品xxx| 香蕉人人精品| 国产精品超碰| 午夜视频精品| 老司机精品视频网| 欧美日韩视频一区二区三区| 国产精品成人自拍| 乱人伦精品视频在线观看| 国产不卡精品在线| 日韩超碰人人爽人人做人人添| 久久久精品午夜少妇| 欧美日韩va| 快she精品国产999| 色综合www| 麻豆一区二区99久久久久| 三级一区在线视频先锋| 高清久久精品| 国产精品三p一区二区| 免费在线观看一区二区三区| 精品国产一区二区三区2021| 日韩欧美中文字幕一区二区三区 | 精品国产亚洲一区二区三区| 国产婷婷精品| 日本在线高清| 久久这里只有精品一区二区| 天堂va在线高清一区| 国产综合精品一区| 97国产成人高清在线观看| 日韩精品免费观看视频| 夜鲁夜鲁夜鲁视频在线播放| 欧美交a欧美精品喷水| 日韩精品免费视频一区二区三区| 国产精品免费看| 秋霞影视一区二区三区| 精品三级久久久| 国产精品久久| 91精品日本| 亚洲精品伊人| 亚洲字幕久久| 人人爽香蕉精品| 国产传媒在线| 精品国产黄a∨片高清在线| 日本午夜精品久久久| 久久午夜精品一区二区| 欧产日产国产精品视频| 久久91视频| 国产精品亚洲成在人线| 日韩av一区二区三区四区| 日本精品一区二区三区在线观看视频| 中文不卡在线| 在线一区二区三区视频| 免费成人av在线播放| 免费精品视频| 亚洲一区二区av| 日韩在线电影| 国产免费av国片精品草莓男男| 欧美日韩夜夜| 国产精品手机在线播放| 国产探花一区在线观看| 日本aⅴ免费视频一区二区三区| 亚洲理论在线| 中文字幕日韩欧美精品高清在线| 中文字幕免费一区二区| 日韩精品三区四区| 你懂的亚洲视频| 精品久久在线| 成人三级高清视频在线看| 日韩欧美精品综合| 激情综合网址| 最新国产精品| 国产调教精品| 国产一区二区三区黄网站| 日韩免费高清| 亚洲一区二区毛片| 亚洲人成亚洲精品| 国产亚洲欧美日韩精品一区二区三区 | 美美哒免费高清在线观看视频一区二区| 亚洲激情偷拍| 亚洲精品动态| 国产精品久久久久久妇女 | 国产日韩一区| 久久精品国产成人一区二区三区| 日韩亚洲一区在线| 亚洲欧美日韩精品一区二区| 日本vs亚洲vs韩国一区三区二区| 日本午夜精品久久久| 国产videos久久| 91精品啪在线观看国产18| 国产精品美女久久久| 97成人在线| 亚洲www免费| 丝袜脚交一区二区| 国产精品久久久久久久久久齐齐| 韩国久久久久久| 中文在线一区| 国产精品麻豆成人av电影艾秋| 日韩大片免费观看| 蜜臀精品一区二区三区在线观看| 国产欧美久久一区二区三区| 91av亚洲| 中文字幕日韩高清在线| 国产成人免费精品| 久久亚洲影院| 三上亚洲一区二区| 久久aⅴ国产紧身牛仔裤| 国产精品亚洲四区在线观看 | 国产精品极品| 亚洲精品123区| 国产精品s色| 亚洲精品电影| 欧美成人精品一级| 国产一区日韩欧美| 欧美综合社区国产| 欧美丝袜一区| 国产精品一线| 中文精品在线| 国产乱码午夜在线视频| 四虎精品一区二区免费| 国产中文在线播放| 亚洲九九精品| 欧美日韩在线播放视频| 国产欧美激情| 快she精品国产999| 午夜av成人| 国产欧美日韩在线观看视频| 久久亚洲专区| 你懂的网址国产 欧美| 好吊日精品视频| 精品视频自拍| 日本91福利区| 美女亚洲一区| 精品国产亚洲日本| 日韩和欧美的一区| 91精品91| 日韩在线不卡| 免费亚洲婷婷| 日本综合视频| 性欧美长视频| 99久久婷婷| 色婷婷色综合| 欧美日韩亚洲一区二区三区在线| 红桃视频欧美| 成人亚洲欧美| 精品三级在线观看视频| 日本色综合中文字幕| 日韩专区欧美专区| 99久久久久国产精品| 国产高潮在线| 精品免费av一区二区三区| 国产麻豆一区二区三区| 亚洲精品护士| 水野朝阳av一区二区三区| 999视频精品| 日韩成人高清| 成人亚洲欧美| 亚洲深夜视频| 中文字幕在线高清| 国产麻豆精品久久| 欧美片第1页综合| 亚洲乱亚洲高清| 免费日本视频一区| 国产偷自视频区视频一区二区| 日韩欧美视频专区| 成人黄色av| av免费不卡国产观看| 国产一区二区三区视频在线| 精品久久亚洲|