自定義刻度 Android自定義滑動刻度進度條

2021-10-16 06:28:06 字數 2597 閱讀 6314

做到以上的效果圖,就可以知道,兩個模式,

首先,定義相應的自定義屬性,額,沒辦法,上頭要求,所以規範點 新建乙個bar_attrs.xml檔案

<?xml version="1.0" encoding="utf-8"?>

attr>

declare-styleable>

resources>

然後就是**中取得相應的屬性值和設定預設值

然後修改seekbar的線的顏色和滑動塊的屬性,通過**定義乙個drawable屬性來進行處理

public void initcolor()else else if (checkitem == node)else 

}invalidate();

}

然後就是在ondraw裡面繪製點,繪製點之前,需要獲取幾個資料點:seekbar的線的xy軸,和點的xy軸。

xy軸可以就是view的高度的對半點就是y軸的點,x軸的起始點一般就是0view的寬度

至於點的話,可以通過線的長度/點的數量(得到平均刻度值)然後乘以相應的點的位置數量值就是得到了各個點的相應的x軸座標,拿到了相應的xy軸,就可以繪製相應的點了

/**

* 在刻度模式下,進行繪製刻度點

* @param canvas

*/@override

protected synchronized void ondraw(canvas canvas)

if (!isacttonup)

for (int i = 0;i <= (node+1);i++)else

}else if (i < checkitem)else

stopx = mpaddingleft+(nodewidth*i);

startx = stopx;

canvas.drawcircle(startx,getmeasuredheight()/2,spotsize,linepaint);}}

super.ondraw(canvas);

}

做好以上的處理,基本的view的操作就ok了,但是呢,體驗感不是很ok,就是沒有滑動塊的粘性處理。這可不行,所以弄下粘性處理吧,讓滑動塊滑到點的附近,根據距離點的值來進行吸引滑動塊,這個可以在ontouchevent裡面進行事件監聽和攔截,當使用者的手指離開螢幕時,獲取當前滑塊的位置,對比左右點的相差距離,決定滑動時向左點自動滑動還是向右點自動滑動。

@override

public boolean ontouchevent(motionevent event) else else

setprogress(checkitem*tmp);

}}else else else

setprogress(checkitem*tmp);}}

invalidate();

if (onitemcheckbarlistener != null)

return true;

}} else if (event.getaction() == motionevent.action_down)

return super.ontouchevent(event);

}

注意的一點是,在監聽到使用者手勢離開螢幕的事件後,得消耗此事件,別讓此事件分發繼續下去,不然,seekbar則會重新繪製,覆蓋以上的效果,在消耗的此事件之後,seekbar的滑動停止監聽事件也就無效了,到時候我們就自己最佳乙個介面,然使用者可以隨時拿到停止滑動的線的數值。

public inte***ce onitemcheckbarlistener 

private onitemcheckbarlistener onitemcheckbarlistener;

public void setonitemcheckbarlistener(onitemcheckbarlistener onitemcheckbarlistener)

嗯,以上就是達到效果圖的效果了 完整**貼出:

---end---

推薦閱讀:

android如何獲取webview內容高度

android之自定義edittext游標和下劃線顏色

【開源庫】github 標星6k+,react native開發必用的乙個ui庫

每乙個「在看」,我都當成真的喜歡

Android自定義控制項 自定義屬性

自定義屬性的過程 1.在res values資料夾中建立attrs的xml檔案。2.寫入標籤,定義子標籤attr,放入自定義屬性的名稱。format 可以用 來同時使用 1 reference 參考某一資源id 2 color 顏色值 3 boolean 布林值 4 dimension 尺寸值 帶有...

Android自定義View 自定義元件

自繪控制項也分兩種,自定義元件和自定義容器,自定義元件是繼承view類,自定義容器時繼承viewgrounp 今天主要分析下自定義元件 還是舉個例子來的實際些,假如我們要畫乙個最簡單的textview,首先想到的就是canvas.drawtext 方法,怎麼畫了?還是得一步一步來 1 寫乙個myte...

Android自定義控制項之自定義View 二

效果如下圖 1 自定義ringview繼承view新增其構造方法並建立畫筆 public class ringview extends view protected boolean isrunning false public ringview context context public ring...