自定義控制項1

2021-07-31 18:22:45 字數 3879 閱讀 5401

0508

算作是學習記錄吧!

自定義控制項有兩部分:1 自定義view 2自定義viewgroup

先從自定義view來吧。

第乙個:圓角

繼承view之後,有四個構造方法:

public

circleimg(context context)

public

circleimg(context context, @nullable attributeset attrs)

public

circleimg(context context, @nullable attributeset attrs, int defstyleattr)

//第四個,要求api21以上

public

circleimg(context context, @nullable attributeset attrs, int defstyleattr, int defstyleres)

說明

如果在code中例項化乙個view會呼叫第乙個建構函式,

如果在xml中定義會呼叫第二個建構函式,

而第三個函式系統是不呼叫的,要由view(我們自定義的或系統預定義的view,如此處的customtextview和button)顯式呼叫,比如在這裡我們在第二個建構函式中呼叫了第三個建構函式,並將r.attr.customizestyle傳給了第三個引數。

查詢使用屬性值的優先順序順序是:

attr > style > defstyleattr > defstyleres > theme

defstyleattr和defstyleres功能一樣,指定的資源形式不同。

android中自定義樣式與view的建構函式中的第三個引數defstyle的意義 - andylizh的專欄 - 部落格頻道 - csdn.net

很多夜間模式就是這只theme來做的,設定之後的重新整理操作呢?啥時候整一下夜間模式?

這個弄清楚了,整一下自定義屬性。

view 的三個核心方法:onmeasure、onlayout、ondraw.

自定義屬性有9個:

1reference參考指定theme中資源id,這個型別意思就是你傳的值可以說引用資源

2string字串,如果你想別人既能直接寫值也可以用類似"@string/test"引用資源的方式,可以寫成format="string/reference"

3color顏色

4dimension尺寸值

5boolean

布林值6

integer:整型7

float

浮點型8

fraction

百分數9

enum

列舉,如果你提供的屬性只能讓別人選擇,不能隨便傳入

10flag

位或運算

二:自定義屬性的宣告

通常在values目錄下的attrs.xml,如下:

name="customvisitingcard">

name= "background" format ="reference|color" />

name= "name" fomat ="string" />

name= "namecolor" format ="color" />

name= "namesize" format ="dimension" />

name= "isshowshadow" format ="boolean" />

name="age"

format="integer" />

name="percentage"

format="fraction" />

name="shadowx"

format="float" />

name="style">

name="stroke"

value="0">

enum>

name="fill"

value="1">

enum>

attr>

name="position">

name="boss"

value="0" />

name="manager"

value="1" />

name="employee"

value="2" />

attr>

declare-styleable >

問題有兩個:1 flag是怎麼回事? 2 color|reference,如何在獲取時區分?

關於flag,參考android中自定義屬性的格式詳解 - 為夢想而努力(馬英才) - 部落格頻道 - csdn.net

關於2:

view的原碼

final typedarray a = context.obtainstyledattributes(

attrs, com

.android

.internal

.r.styleable

.view, defstyleattr, defstyleres);

case com

.android

.internal

.r.styleable

.view_background:

background = a.getdrawable(attr);

break

;

這裡用 getdrawable(attr)就搞定了,如何搞定的呢?要不是走一遍原碼?糾結中。。。。

先不過吧,有空再說,原碼比較複雜,耗時太多。

0512

接著來寫吧。

圓角應該有哪幾個屬性呢?

1、圓角的半徑是要的吧,如果是正方形的,50%的半徑不就是圓形了嗎?

好像這乙個屬性就夠了吧。不過可以試著拓展一下,比如:

1、如果是50%的話,圓形,可以新增乙個道邊框,邊框有寬度和顏色

2、如果原圖不是正方形的呢?也要製作圓形,怎麼處理?

這兩個,先不處理,把圓角弄好再說。

0515

寫著寫著,發現還是不會寫,知道要用porterduffxfermode來實現,可到底咋寫呢?

首先卡在繪製圓形上,想想第一種方式:xml定義乙個shape檔案,讀取,第二種方式,canvas繪製。

方式是有了,到底咋寫呢?

一頭霧水,確實是api不熟悉,到底咋用不曉得,引數傳啥,drawable和bitmap,bitmapfactory,等等都不清楚。

canvas也忘得差不多了。還有typedarray 也忘了。

好吧,從整理api開始。理個順序:typearray,canvas,drawable,bitmap,bitmapfactory,paint,等等等等。

api-typedarray - qq_20198405的部落格 - 部落格頻道 - csdn.net

canvas - qq_20198405的部落格 - 部落格頻道 - csdn.net

typedarray ,come on!

8.2.1 bitmap(位圖)全解析 part 1 | 菜鳥教程

android 完美實現圓角和圓形(對實現進行分析) - hongyang - 部落格頻道 - csdn.net

鴻洋的部落格寫的確實挺好的,就按這篇來實現吧。

接著來寫圓角。

第二個:右上角三角標

第三個:右上角訊息數字

自定義控制項(1)

今天看了下有關控制項呈現的問題。做個筆記,免得遺忘了,就不好了。dotnet類庫里,伺服器控制項都繼承自system.web.ui.controls.control類,該類提供了render,renderchildren,rendercontrol等3種方法實現控制項呈現。這些方法都使用htmlte...

Wpf 自定義控制項 1

1.新建乙個wpf工程,在工程下面新建 乙個資料夾themes,在themes下新建兩個資源字典檔案generic.xaml和prettyseekbar.xaml generic.xaml resourcedictionary xmlns xmlns x resourcedictionary.mer...

自定義控制項 自定義鐘錶

private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...