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