上次描述的主要是雨點的繪製和運動,因為繪製可以自己控制了,邏輯也可以自己進行改變,所以還有很多事情可以做。
首先可以改變雨點的顏色為自己想要的顏色,還可以讓每個雨點的顏色都隨機,更可以對畫面進行剪裁而出現類似電視上一圓形從小到大顯示裡面的畫面。
聽起來好像很複雜,其實都是用固定的幾步,也就是固定自定義view的模式,寫過一次後,直接就可以套用了。
廢話少說,上次主要是雨點的邏輯,那麼雨點的數量怎麼控制或設定,其實很簡單的**:
"" xmlns:effect=""
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff000000"
android:orientation="vertical" >
"match_parent"
android:layout_height="match_parent"
android:visibility="gone"
effect:itemnum="100" />
...
設定數量只需要 effect:itemnum="100",當然effect這個是要在根檢視中宣告下:xmlns:effect="",至於想要什麼名字替換effect都可以,如改為particle如下:
xmlns:particle=""
然後設定數量:particle:itemnum="100"
那麼現在有疑問了,宣告這個particle,怎麼就可以使用itemnum這個屬性了呢,很簡單,在res目錄下的values下的attrs.xml中定義如下:
<?xml version="1.0" encoding="utf-8"?>
name="effectanimation">
name="itemnum"
format="integer" />
name="itemcolor"
format="color" />
name="randcolor"
format="boolean"/>
name="clipscale"
format="boolean"/>
declare-styleable>
resources>
可以看到,我在裡面宣告了4個屬性,其實就相當於**裡面宣告了乙個變數,如就相當於int itemnum;只不過這個是在xml中宣告的,在xml中使用。
現在為止,思路是在xml中宣告了設定數量的變數,然後在布局檔案中使用,但是,系統不會幫你做任何事情,數量怎麼控制,還需要你在**裡面實現,那麼看**:
public
effectanimation(context context, attributeset attrs)
可以看到itemnum是通過解析xml然後獲取的
typedarray a = context.obtainstyledattributes(attrs, r.styleable.effectanimation);
itemnum = a.getint(r.styleable.effectanimation_itemnum, 0);
其他自定義的xml屬性也可以按這個步驟來解析(最後記得要a.recycle();)
回顧下過程,
1.首先在res下values下的xml檔案中宣告itemnum屬性。
2.然後在布局中使用這個itemnum(在布局根部要定義如xmlns:particle=""),然後以particle:itemnum="100"的方式使用。
3.在**中解析itemnum。
4.在**中使用itemnum加入到相應的邏輯當中。
根據上面的步驟itemnum,itemcolor,randcolor,clip_scale就可以解析到值了,如果xml中使用了,就不會使用預設值。
itemcolor在rainpoint加入的列表的時候傳入的構造方法中,這樣,雨點的顏色就可以設定了,效果如下(設定屬性effect:itemcolor="#ff00aa00"):
[itemcolor](
randcolor也是在rainpoint加入的時候傳入構造方法,如果設定為true則在生成雨點的時候顏色是隨機的,效果如下(設定屬性effect:randcolor="true" ):
[randcolor](
clip_scale這個屬性的處理主要是在自定義view中進行處理的,如果設定為true,則會通過canvas.clippath(path);來控制顯示區域,效果如下(設定屬性effect:clipscale="true"):
[clipscale](
xml中定義effectanimation主要是我寫的粒子效果的自定義view都是繼承它的,所以com.lxf.particle.widget.rainanimation這個在布局裡面使用的屬性可以在effectanimation進行處理。
對了,如果大家有什麼好的想法關於粒子效果的,如果有思路可以一起討論哦。
Android自定義View 自定義元件
自繪控制項也分兩種,自定義元件和自定義容器,自定義元件是繼承view類,自定義容器時繼承viewgrounp 今天主要分析下自定義元件 還是舉個例子來的實際些,假如我們要畫乙個最簡單的textview,首先想到的就是canvas.drawtext 方法,怎麼畫了?還是得一步一步來 1 寫乙個myte...
Android自定義View實現
android自定義view實現很簡單 繼承view或者其子類,重寫建構函式 ondraw,onmeasure 等函式,根據繼承的類的不同可能有所不同。如果自定義的view需要有自定義的屬性,需要在values下建立attrs.xml。在其中定義你的屬性。在使用到自定義view的xml布局檔案中需要...
Android 自定義View 一
android的ui介面都是由view和viewgroup及其派生類組合而成的。其中,view是所有ui元件的基類,而viewgroup是容納這些元件的容器,其本身也是從view派生出來的。androidui介面的一般結構可參見下面的示意圖 可見,作為容器的viewgroup可以包含作為葉子節點的v...