做到以上的效果圖,就可以知道,兩個模式,
首先,定義相應的自定義屬性,額,沒辦法,上頭要求,所以規範點 新建乙個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
的線的x
,y
軸,和點的xy
軸。
線xy
軸可以就是view
的高度的對半點就是y
軸的點,x
軸的起始點一般就是0
和view
的寬度
至於點的話,可以通過線的長度/點的數量(得到平均刻度值)然後乘以相應的點的位置數量值就是得到了各個點的相應的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...