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

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

Android實現帶節點的進度條

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

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

Android實現帶節點的進度條

首先定義一些需要的屬性

/** * 背景畫筆 */ 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; /** * 節點文字 */ private List<String> nodeList; private List<Rect> mBounds; /** * 節點圓的半徑 */ private int radius; /** * 文字和節點進度條的top */ private int marginTop; /** * 兩個節點之間的距離 */ private int dividWidth; /** * 選中位置 */ private int selectIndex;

然后在構造方法中初始化這些數據

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)); }

設置節點文字

/** * 設置數據 * @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中繪制節點進度條和繪制文字

1、繪制灰色背景線條

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

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

//畫節點圓 //每個圓相隔的距離 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、繪制節點上的文字

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實現帶節點的進度條

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

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); } } }

點擊節點進行節點切換

// 實現節點切換,把注釋打開就行了@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; }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品女主播一区二区三区| 欧美日韩日本国产亚洲在线| 亚洲va中文在线播放免费| 香蕉久久久久久| 亚洲成人精品| 蜜臀久久精品| 成人午夜在线| 美女视频网站久久| 你懂的国产精品| 国产精品xxx| 国产调教精品| 国产精品s色| 99香蕉国产精品偷在线观看 | 国产欧美大片| 国产精品手机在线播放| 日韩av成人高清| 欧美日韩中文| 精品高清久久| 色综合www| 好看的亚洲午夜视频在线| 久久久久久久久丰满| 国产一区视频在线观看免费| 日韩国产在线观看一区| 麻豆精品在线观看| 麻豆视频在线看| 一本一本久久| 欧美交a欧美精品喷水| 都市激情国产精品| 激情欧美一区| 欧美久久亚洲| 日韩欧美精品| 亚洲伊人影院| 国产一区精品福利| 99tv成人| 欧美日韩在线精品一区二区三区激情综合 | 国产综合色产| 欧美视频精品全部免费观看| 中文字幕在线官网| 巨乳诱惑日韩免费av| 麻豆一区二区三区| 欧美+亚洲+精品+三区| 青青草国产精品亚洲专区无| 性欧美长视频| 午夜欧美巨大性欧美巨大| 婷婷精品在线观看| 丝袜国产日韩另类美女| 久久爱www成人| 国产亚洲在线| 动漫av一区| 日韩av中文字幕一区二区三区| 成人在线黄色| 欧美天堂一区二区| 欧美日韩国产精品一区二区亚洲| 国产精品亚洲四区在线观看 | 亚洲黄色在线| 9999国产精品| 久久这里只有精品一区二区| 黄色亚洲精品| 香蕉久久夜色精品国产| 在线精品亚洲欧美日韩国产| 国产精品久久久久久久久久妞妞 | 精品国产一区二区三区噜噜噜| 国产精品丝袜xxxxxxx| 青青青免费在线视频| 国产精品日韩精品在线播放| 亚洲精品乱码| 首页欧美精品中文字幕| 欧美成人综合| 欧美成人综合| 久久亚洲不卡| 亚洲美洲欧洲综合国产一区| 老司机久久99久久精品播放免费| 99久久精品国产亚洲精品| 热三久草你在线| 少妇精品导航| 中文精品视频| 欧美羞羞视频| 五月精品视频| 蜜臀久久99精品久久久久久9 | 国产麻豆一区二区三区| 欧美在线不卡| 国产91在线精品| 日韩欧美一区二区三区在线观看| 欧洲精品一区二区三区| 久久久久久久久99精品大| 国产第一亚洲| 麻豆精品蜜桃| 久久亚洲美女| 欧美另类中文字幕 | 日韩国产欧美视频| 欧美激情99| 国产v日韩v欧美v| 国产综合精品| 午夜精品影视国产一区在线麻豆| 欧美中文高清| 久久影院午夜精品| 在线亚洲精品| 精品国产亚洲一区二区三区在线 | 国产成人免费精品| 久久影视一区| 国产日产一区| 日韩大片在线观看| 一本综合精品| 国产99在线| 日韩国产在线不卡视频| 麻豆免费精品视频| 快播电影网址老女人久久| 蘑菇福利视频一区播放| 精品在线网站观看| 影音先锋久久精品| 国产66精品| 天堂va欧美ⅴa亚洲va一国产| 在线手机中文字幕| 综合激情视频| 国产91精品对白在线播放| 国产精品久久久久久久久久久久久久久| 伊人久久大香线蕉av不卡| 国产精品一区二区精品| 黄色日韩在线| 欧美日韩免费看片| 老司机免费视频一区二区三区| 蜜桃国内精品久久久久软件9| 国产精品主播在线观看| 亚洲精品乱码| 日韩激情网站| 亚洲欧美日本国产专区一区| 日韩精品91| 正在播放日韩精品| 国产精品不卡| 91麻豆国产自产在线观看亚洲| 国产精品多人| 卡一卡二国产精品| 动漫av一区| 久久婷婷丁香| 欧美午夜精彩| 久久九九精品| 亚洲天堂一区二区| 欧美羞羞视频| 亚洲www免费| 国产99精品一区| 亚洲欧洲一区| 精品在线网站观看| 欧美精品不卡| 国产毛片精品| 国产精品成久久久久| 精品亚洲免a| 日韩欧美精品综合| 欧美香蕉视频| 久草免费在线视频| 黄色日韩精品| 在线视频观看日韩| 99久久久久久中文字幕一区| 成人午夜网址| 国内不卡的一区二区三区中文字幕| 国产欧美日韩亚洲一区二区三区| 日韩精品电影| 欧美成人久久| 亚洲视频电影在线| 日韩午夜视频在线| 国产精品成人a在线观看| 精精国产xxxx视频在线野外| 亚洲成av人片一区二区密柚| 久久久久亚洲| 久久精品国产99国产精品| 精品国产黄a∨片高清在线| 97精品一区二区| 国产精品99免费看| 久久国产毛片| 国产午夜一区| 92国产精品| 欧美综合二区| 国产精品入口久久| 亚洲精品一二三区区别| 亚洲日本国产| 精品国产中文字幕第一页| 久久中文视频| 国产精品白丝久久av网站| 国产 日韩 欧美一区| 爽好多水快深点欧美视频| 成人午夜毛片| 天堂久久av| 樱桃视频成人在线观看| 夜久久久久久| 成人在线观看免费视频| 欧美日韩日本国产亚洲在线| 日本亚洲视频在线| 亚洲爱爱视频| 美女精品一区二区| 国产精品美女| 精品午夜久久| 欧美日韩网址| 亚洲一区二区三区久久久| 国产精品不卡| 欧美日韩精品一区二区三区视频| 免费久久99精品国产自在现线| 精品一区二区三区中文字幕 | 精品视频网站| 亚洲精品伊人| 国产精品老牛| 99久久亚洲精品蜜臀|