自學自定義view 畫虛線

2021-07-11 12:28:40 字數 2367 閱讀 7254

之前專案中需要虛線,直接在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...