一讓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...