自我繪製三

2021-09-11 14:21:10 字數 2672 閱讀 2585

一讓padding值有效

前邊我們已經繪製了兩個自定義控制項,細心的同學可能會發現問題:你自定義view設定padding值是無效的。但是margin是有效的。

android:layout_margin=""

android:padding=""

複製**

觀察上邊的**:

margin是以layout開頭的,所以它是屬於父類布局處理的事情,而父類布局我們使用的是系統的布局,系統已經幫我們處理了,所以它是有效的。

padding沒有以layout開頭,它屬於控制項自身的屬性,需要我們自己去處理,如果沒有處理,當然是無效屬性。

由此可知:

自定義view時候需要開發者處理padding值

自定義viewgroup時候需要開發者處理margin和padding值

這篇我們只說自定義view處理padding的事情,而自定義viewgroup的問題處理等講到自定義viewgroup的時候再去講怎麼處理。

怎麼處理呢?

很簡單,只需要在計算的時候獲取內邊距的值,然後再計算的時候考慮進去即可。

怎麼獲取這個值呢?

在自定義view中通過get方法直接獲取即可,對應的kotlin中直接使用常量即可

paddingleft

paddingright

paddingtop

paddingbottom複製**

當然我們再自定義view,自己使用的時候一般都不去考慮這個四個屬性(我反正是這樣),但是自定義view給別人用的時候,我們一般要考慮四個屬性。當然,為了規範開發,考慮上去這四個值沒有什麼錯。(之前兩個自定義view我就不做修改,知道有這個問題即可)

效果圖:

原理圖:

對應**:

package myviews

import android.animation.objectanimator

import android.content.context

import android.graphics.canvas

import android.graphics.color

import android.graphics.paint

import android.graphics.path

import android.os.build

import android.support.annotation.requiresapi

import android.util.attributeset

import android.util.log

import android.view.view

/** * created by administrator on 2018/7/10.

* 自定義水平進度條,主要學習padding設定的用法

*/class horizontalprogress : view

//結束進度,

var endprogress = 0

//構造方法

constructor(context: context?) : this(context, null)

//構造方法

constructor(context: context?, attrs: attributeset?) : this(context, attrs, 0)

//構造方法

constructor(context: context?, attrs: attributeset?, defstyleattr: int) : this(context, attrs, defstyleattr, 0)

//構造方法

constructor(context: context?, attrs: attributeset?, defstyleattr: int, defstyleres: int) : super(context, attrs, defstyleattr, defstyleres)

private fun initpaint

() //測量

override fun onmeasure(widthmeasurespec: int, heightmeasurespec: int)

//繪製

@requiresapi(build.version_codes.lollipop)

override fun ondraw(canvas: canvas)

//畫背景線,這裡考慮了padding值

private fun drawbgline(canvas: canvas)

//畫頂部矩形

@requiresapi(build.version_codes.lollipop)

private fun drawtoprect(canvas: canvas)

//繪製三角形

fun draw********(canvas: canvas)

//繪製頂部文字

private fun drawtoptext(canvas: canvas)

//繪製進度走的值

fun drawprogressline(canvas: canvas)

//開啟動畫

fun start

() }複製**

HTTP自我介紹(三)

你說你會愛我一輩子,我真傻,居然忘了問 是這輩子還是下輩子 get 獲取資源 get方法用來獲取資源。如果請求的資源是文字,那就保持原樣返回 如果像cgi 通用閘道器介面 那樣的程式,則返回經過執行後的輸出結果。post 傳輸實體主體 post方法用來傳輸實體的主體,雖然用get方法也可以傳輸實體的...

canvas雨滴繪製總結(三)

5 繪製雨滴n個不能同時下落 問題一 canvas寬高設定出現白邊 問題二 canvas具有預設大小 300px150px 問題三 canvas自適應頁面大小如何實現 問題四 雨滴繪製原理 問題五 setintervalmoverain100060 問題六 乙個函式在沒有指定呼叫主體前它的this永...

matlab 三維繪製

1.mesh z 語句 mesh z 語句可以給出矩陣z元素的三維消隱圖,網路表面由z座標點定義,與前面敘述的x y平面的線格相同,圖形由鄰近的點連線而成 它可用來顯示用其它方式難以輸出的包含大量資料的大型矩陣,也可用來繪製z變數函式 顯示兩變數的函式z f x,y 第一步需產生特定的行和列的x y...