亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

一款美觀的自定義SeekBar,支持單、雙向、階段滑動、刻度、負數等多種強大自定義屬性

2019-11-09 13:59:19
字體:
來源:轉載
供稿:網友

效果圖

效果圖


前言

篇幅有限,本文只講解關鍵關鍵思路,伸手黨和想看詳細思路的請移步 傳送門點我點我??!,如果喜歡,歡迎 Star 和 Fork !


實現思路

本控件其實奔著雙向滑動的SeekBar實現的,不過兼容了單向滑動(隱藏一個拖動按鈕不就是單向的了嘛),所以我以 雙向滑動思路為例。

RangeSeekBar主要包括兩個類,一個是RangeSeekbar類,主要負責繪制進度條以及處理滑動相關邏輯,計算當前滑動值;另一個是SeekBar類,主要負責繪制拖動按鈕相關,如繪制背景以及提示信息等。我們用RangeSeekBar初始化控件的一些屬性,并且生成兩個SeekBar對象,協調他們之間的關系。

關鍵代碼及解析

主要包括控件繪制、兩個拖動按鈕的滑動邏輯及進度的計算。

控件繪制

繪制原理很簡單,計算 –> 定位 –> 繪制。講之前先放一張圖,你就能理解Android是如何定位的了。

這里寫圖片描述


繪制進度條

這里寫圖片描述

計算:

lineLeft = 2 * DEFALT_PADDING;lineRight = View的寬度 - 2 * DEFALT_PADDING;lineTop = (int)mHintBGHeight+ mThumbSize/2 -mSeekbarHight/2 + DEFALT_PADDING;lineBottom = lineTop + mSeekbarHight;lineWidth = lineRight - lineLeft;lineCorners = (int) ((lineBottom - lineTop) * 0.45f);

定位:

RectF line = new RectF();line.set(lineLeft, lineTop, lineRight, lineBottom);

繪制:

canvas.drawRoundRect(line, lineCorners, lineCorners, mMainPaint);

繪制拖動條按鈕

這里只講解使用圖片如何繪制,自己填充的和進度條類似。

這里寫圖片描述

計算:

left = lineLeft - mThumbSize / 2; right = lineLeft + mThumbSize / 2; top = lineBottom - mThumbSize / 2; bottom = lineBottom + mThumbSize / 2; Bitmap original = BitmapFactory.decodeResource(context.getResources(), bmPResId); if (original != null) { Matrix matrix = new Matrix(); float scaleHeight = mThumbSize * 1.0f / original.getHeight(); float scaleWidth = scaleHeight; matrix.postScale(scaleWidth, scaleHeight); bmp = Bitmap.createBitmap(original, 0, 0, original.getWidth(), original.getHeight(), matrix, true); }

定位與繪制:

canvas.drawBitmap(bmp, left, lineTop - bmp.getHeight() / 2, null);

兩個拖動按鈕的滑動邏輯及進度的計算

首先要判斷當前手指拖動的是哪個按鈕,SeekBar類中這個方法可以判斷當前按鈕是否被拖動:

/** * 拖動檢測 * @param event * @return */ protected boolean collide(MotionEvent event) { float x = event.getX(); float y = event.getY(); int offset = (int) (lineWidth * currPercent); return x > left + offset && x < right + offset && y > top && y < bottom; }

然后在RangeSeekbar的onTouchEvent中當手指按下時根據按鈕的位置和手指的當前坐標即可判斷當前按鈕

case MotionEvent.ACTION_DOWN: boolean touchResult = false; if (rightSB != null && rightSB.currPercent >= 1 && leftSB.collide(event)) { currTouch = leftSB; touchResult = true; } else if (rightSB != null && rightSB.collide(event)) { currTouch = rightSB; touchResult = true; } else if (leftSB.collide(event)) { currTouch = leftSB; touchResult = true; }

當手指移動時,我們根據坐標即可計算出按鈕當前位置占整個進度條的比例,從而可以算出兩個按鈕的值,至于兩個按鈕相遇時,我們可以根據兩個按鈕當前的值判斷,左邊的按鈕的值不能大于右邊的值,同理,右邊按鈕的值也不能小于左邊的值。


注意

進度提示的背景的繪制和拖動的按鈕原理類似,但是有一點不一樣的地方就是考慮到他可能會被拉伸,所以我用的是9Path文件,9Path的繪制和普通的bitmap繪制稍有不同,詳情請看另一篇文章 9path 繪制。如果你想改變它的背景圖片的話,請使用9Path文件!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲www永久成人夜色| 久久影视电视剧免费网站| 日韩色av导航| 91av网站在线播放| 韩国福利视频一区| 91亚洲精品视频| 日韩精品亚洲视频| 97精品欧美一区二区三区| 亚洲国产精品高清久久久| 欧美在线观看www| 日韩精品欧美国产精品忘忧草| 欧美激情免费视频| 中文字幕日韩电影| 久久视频这里只有精品| 啊v视频在线一区二区三区| 精品久久香蕉国产线看观看gif| 国产精品久久久久久超碰| y97精品国产97久久久久久| 成人字幕网zmw| 美日韩在线视频| 成人国内精品久久久久一区| 中文字幕无线精品亚洲乱码一区| 亚洲天堂久久av| 国产精品在线看| 亚洲欧洲自拍偷拍| 国产精品日韩在线| 57pao成人永久免费视频| 欧美性xxxxxx| 精品日韩中文字幕| 成人免费在线视频网址| 色综合影院在线| 91免费在线视频| 国产成人精品久久| 欧美成人午夜视频| 欧美日韩在线免费观看| 亚洲欧美精品伊人久久| 国产一区二区欧美日韩| 欧美精品一区三区| 国产不卡精品视男人的天堂| 欧美区在线播放| 日韩在线观看免费| 亚洲二区在线播放视频| 中文字幕欧美日韩| 国产成人精品一区二区三区| 久久人人爽人人| 日韩在线观看网址| 亚洲精品一区二三区不卡| 91欧美精品成人综合在线观看| 国产精品成人v| 日本久久91av| 红桃av永久久久| 国模私拍一区二区三区| 久久不射电影网| 日韩高清电影好看的电视剧电影| 国产suv精品一区二区三区88区| 久久久精品亚洲| 欧美日韩亚洲精品内裤| 日本免费一区二区三区视频观看| 欧美在线视频免费观看| 97国产suv精品一区二区62| 精品久久香蕉国产线看观看亚洲| 日韩专区在线观看| 国产亚洲精品综合一区91| 欧美成人性生活| 爽爽爽爽爽爽爽成人免费观看| 欧美成人精品影院| 91黄色8090| 日韩精品久久久久久福利| 国精产品一区一区三区有限在线| 精品日本美女福利在线观看| 97成人超碰免| 欧美成人免费播放| 欧洲一区二区视频| 国产精品视频区1| 国产一区二区三区免费视频| 日本高清视频一区| 91精品国产色综合| 美女久久久久久久久久久| 亚洲国产精品中文| 欧美在线视频免费观看| 日韩av日韩在线观看| 亚洲国产精品va在线看黑人动漫| 国产精品日韩在线播放| 欧美另类在线播放| 精品欧美国产一区二区三区| 亚洲精品资源在线| 亚洲欧洲xxxx| 精品成人久久av| 国产一区二区动漫| 国产精品视频xxx| 国产精品久久久久久久久久| 日韩一区二区三区国产| 亚洲精品一区久久久久久| 国产精品电影久久久久电影网| 日韩在线视频免费观看高清中文| 68精品国产免费久久久久久婷婷| 久久久久久久999| 国产+人+亚洲| 日本高清不卡的在线| 久久天天躁日日躁| 3344国产精品免费看| 久久婷婷国产麻豆91天堂| 亚洲精品中文字幕有码专区| 91理论片午午论夜理片久久| 高清在线视频日韩欧美| 日韩精品免费在线播放| 亚洲一区二区三区乱码aⅴ蜜桃女| 成人午夜激情网| 一区二区三区黄色| 动漫精品一区二区| 久久久精品久久| 国产极品jizzhd欧美| 精品夜色国产国偷在线| 日韩av在线免费观看| 美日韩精品视频免费看| 亚洲第一区中文字幕| 色偷偷噜噜噜亚洲男人| 国产精品欧美日韩一区二区| 日韩精品一区二区三区第95| 亚洲一区制服诱惑| 久久精品99久久香蕉国产色戒| 日韩视频中文字幕| 日韩电影在线观看中文字幕| 久久久久久久久久国产精品| 欧美国产日韩精品| 欧美成人黄色小视频| 欧美肥臀大乳一区二区免费视频| 亚洲天堂av网| 亚洲二区在线播放视频| 中文国产成人精品| 国产精品久久二区| 欧美激情精品久久久久久变态| 成人在线免费观看视视频| 日韩黄在线观看| 日韩毛片中文字幕| 久久精品国产欧美激情| 久久久成人精品视频| 蜜月aⅴ免费一区二区三区| 亚洲无限乱码一二三四麻| 欧美福利视频在线观看| 中文字幕亚洲一区二区三区| 色噜噜狠狠色综合网图区| 日韩欧美在线视频观看| 欧美在线免费看| 国产91|九色| 成人免费在线网址| 国产精品无av码在线观看| 亚洲第一页自拍| 97人人模人人爽人人喊中文字| 深夜福利亚洲导航| 亚洲欧美国产va在线影院| 国产精品久久久久久久7电影| 国产精品中文字幕在线观看| 欧美中文字幕在线| 国产日韩换脸av一区在线观看| 欧美午夜www高清视频| 亚洲无线码在线一区观看| 日本久久久久久久久久久| 国产精欧美一区二区三区| 国产欧美一区二区三区视频| 中文字幕日韩av综合精品| 亚洲国产精品va在线观看黑人| 亚洲欧洲xxxx| 国产精品一区二区3区|