之前專案中需要虛線,直接在drawable裡寫了xml形式的效果,後來發現在5.0以後的手機上顯示有問題,不知道是偶然還是什麼,就決定自己畫個。。。效果實在簡單,因為我從來沒有自己畫過自定義view!!!
好了,決定下來就開始畫,買的書上大概看了下有流程,其實還是要熟悉view的繪製過程。
1,在values資料夾下新建attrs,為了存放我們虛線的一些屬性,以及可以在布局中呼叫設定。簡單分析下,虛線有間隔,虛線格寬度和高度,還有虛線的顏色。
後面的format是你屬性的屬性值型別。
我們可以在**中獲取到這些設定。
package com.example.zouwansheng.mydiyview.view;
import android.content.context;
import android.content.res.typedarray;
import android.graphics.canvas;
import android.graphics.color;
import android.graphics.paint;
import android.util.attributeset;
import android.view.view;
import com.example.zws.mydiyview.r;
import com.example.zws.mydiyview.utils.dimenutil;
/** * created by zws on 2016/4/28.
*/public class dashlineview extends view
public dashlineview(context context, attributeset attrs)
public dashlineview(context context, attributeset attrs, int defstyleattr)
@override
protected void onmeasure(int widthmeasurespec, int heightmeasurespec)
@override
protected void ondraw(canvas canvas) {
super.ondraw(canvas);
mpaint = new paint(paint.anti_alias_flag);
mpaint.setstyle(paint.style.stroke);
mpaint.setstrokewidth(mdashheight);//畫筆的寬度,其實就是虛線的高度
mpaint.setcolor(mdashcolor);
int width = getmeasuredwidth();
int height = getmeasuredheight();
float length = mdashgap + mdashwidth;
int num = (int) math.floor(width/length);
for (int i=0;i**放上了,我就說下步驟。
第一步,繼承view,實現幾個構造方法。本來是四個,最後乙個沒有用就去掉了。為什麼要寫這三個,因為手機型別不同,有時候咱也不知道會走哪乙個,普遍說的是第二個,
所以咱就把第乙個指向第二個,第二個指向第三個,這樣就確保不會出錯。
在第三個構造方法裡面,我們要獲得我們四個屬性。
通過typedarray例項獲取我們之前在attrs裡面四個屬性,與**裡對應上,獲取我們之後如果在布局中給這些屬性賦值了的值。
第二步,重寫onmeasure方法,可寫可不寫,測量的乙個方法,我們不需要。有時候要重寫,下次我會練下複雜的!
第三步,重寫ondraw方法,這裡就需要繪製虛線了,獲取畫筆paint,設定畫筆的型別stroke,畫筆的寬度和高度。然後,我們要獲取虛線的寬度和高度,這裡的寬度和高度,就是我們要最終畫成的效果虛線的寬度和高度。有時候虛線兩邊還會有margin,也需要注意虛線的實際長度要減去這兩邊的margin距離。
畫筆開始畫!我們用乙個迴圈,但是畫筆一次要畫多長?畫多少次?起始x,y座標?畫一次的最終x,y座標?
所以我們定義了個length,就是一次畫多長,根據最終虛線的長度算出來需要畫多少次num。
其實我這裡做複雜了,一次的length就可以是乙個虛線格的寬度,終點x座標就可以是i*length+mdashgap。num演算法應該不變。
好了。這裡我們就畫好了。
第四步,去布局檔案裡,
不然會報錯。
好了,效果就那樣子,可以自己調。
自己一步步敲過來,寫的有點詳細,可能有些理解是錯的,肯定有錯的!望懂的人看到了指導一下。
自定義View的旅程 canvas畫弧線
畫弧線用到的方法drawarc canvas畫弧線的方法drawarc有兩個過載方法 public void drawarc rectf oval,float startangle,float sweepangle,boolean usecenter,paint paint public void ...
android中自定義虛線
1 在drawble下面自定義資源檔案 dashline xml version 1.0 encoding utf 8 xmlns android android shape line android dashgap 3px android dashwidth 2px android width 1...
Android自定義虛線繪製
兩種方式 1 drawable資料夾下通過shape繪製 2 自定義控制項canvas繪製 一 width 線段的高度 color 線段的顏色 dashwidth 線段寬度 dashgap 線段之間間隔寬度 布局檔案中使用 在4.0的裝置上,虛線會變成實線,我們需要加入 android layert...