天天看點

Android 自定義View

Android 自定義View為MyCustomView。在MyCustomView畫了一個Rect,

顔色為Green,和一個為紅色的文字。

<code>public</code> <code>class</code> <code>MyCustomView</code><code>extends</code> <code>View{</code>

<code>     </code><code>private</code> <code>Paint mPaint; </code>

<code>     </code><code>private</code> <code>Context mContext; </code>

<code>     </code><code>private</code> <code>static</code> <code>final</code> <code>String mString =</code><code>"Hello world!"</code><code>; </code>

<code>    </code> 

<code>    </code><code>public</code> <code>MyCustomView(Context context) {</code>

<code>        </code><code>super</code><code>(context);</code>

<code>        </code><code>// TODO Auto-generated constructor stub</code>

<code>    </code><code>}</code>

<code>    </code><code>public</code> <code>MyCustomView(Context context, AttributeSet attr) {</code>

<code>        </code><code>super</code><code>(context,attr);</code>

<code>        </code> 

<code>     </code><code>@Override</code> 

<code>     </code><code>protected</code> <code>void</code> <code>onDraw(Canvas canvas) { </code>

<code>         </code><code>// TODO Auto-generated method stub </code>

<code>         </code><code>super</code><code>.onDraw(canvas); </code>

<code>           </code> 

<code>         </code><code>mPaint =</code><code>new</code> <code>Paint(); </code>

<code>         </code> 

<code>         </code><code>mPaint.setColor(Color.GREEN);</code>

<code>         </code><code>mPaint.setStyle(Style.FILL);</code>

<code>         </code><code>canvas.drawRect(</code><code>new</code> <code>Rect(</code><code>10</code><code>,</code><code>10</code><code>,</code><code>300</code><code>,</code><code>500</code><code>), mPaint); </code>

<code>         </code><code>mPaint.setColor(Color.RED); </code>

<code>         </code><code>canvas.drawText(mString,</code><code>50</code><code>,</code><code>550</code><code>, mPaint);</code>

<code>     </code><code>}</code>

<code>}</code>

 将自定義的View添加到activity_main的Layout中

<code>&lt;?xml version=</code><code>"1.0"</code> <code>encoding=</code><code>"utf-8"</code><code>?&gt; </code>

<code>    </code><code>&lt;LinearLayout xmlns:android=</code><code>"http://schemas.android.com/apk/res/android"</code> 

<code>        </code><code>android:orientation=</code><code>"vertical"</code> 

<code>        </code><code>android:layout_width=</code><code>"fill_parent"</code> 

<code>        </code><code>android:layout_height=</code><code>"fill_parent"</code> 

<code>        </code><code>&gt; </code>

<code>    </code><code>&lt;TextView   </code>

<code>        </code><code>android:layout_width=</code><code>"fill_parent"</code>  

<code>        </code><code>android:layout_height=</code><code>"wrap_content"</code>  

<code>        </code><code>android:text=</code><code>"@string/hello_world"</code> 

<code>        </code><code>/&gt; </code>

<code>   </code><code>&lt;com.example.customview.MyCustomView</code>

<code>       </code><code>android:layout_width=</code><code>"fill_parent"</code>

<code>       </code><code>android:layout_height=</code><code>"fill_parent"</code>

<code>       </code><code>/&gt;</code>

<code>    </code><code>&lt;/LinearLayout&gt;</code>

<a href="http://my.eoe.cn/863210/archive/1205.html"> 參考</a>

其中Layout中的&lt;com.example.customview.MyCustomView /&gt;就是對該自定義控件的使用。

在value檔案夾下建attrs.xml檔案。 定義了兩個屬性,分别為文本顔色和文本大小。

1

2

3

4

5

6

7

<code>&lt;?xml version=</code><code>"1.0"</code> <code>encoding=</code><code>"utf-8"</code><code>?&gt;</code>

<code>&lt;resources&gt;</code>

<code>    </code><code>&lt;declare-styleable name=</code><code>"MyView"</code><code>&gt;</code>

<code>        </code><code>&lt;attr name=</code><code>"textColor"</code> <code>format=</code><code>"color"</code> <code>/&gt;</code>

<code>        </code><code>&lt;attr name=</code><code>"textSize"</code> <code>format=</code><code>"dimension"</code> <code>/&gt;</code>

<code>    </code><code>&lt;/declare-styleable&gt;</code>

<code>&lt;/resources&gt;</code>

MyCustomView類更改如下

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

<code>public</code> <code>class</code> <code>MyCustomView </code><code>extends</code> <code>View {</code>

<code>    </code><code>private</code> <code>Paint mPaint;</code>

<code>    </code><code>private</code> <code>Context mContext;</code>

<code>    </code><code>private</code> <code>static</code> <code>final</code> <code>String mString = </code><code>"Hello world!"</code><code>;</code>

<code>        </code><code>mPaint = </code><code>new</code> <code>Paint();</code>

<code>        </code><code>super</code><code>(context, attr);</code>

<code>        </code><code>TypedArray array = context.obtainStyledAttributes(attr, R.styleable.MyView);</code>

<code>        </code><code>int</code> <code>textColor = array.getColor(R.styleable.MyView_textColor, </code><code>0XFFFFFFFF</code><code>);</code>

<code>        </code><code>float</code> <code>textSize = array.getDimension(R.styleable.MyView_textSize, </code><code>30</code><code>);</code>

<code>        </code><code>mPaint.setColor(textColor);</code>

<code>        </code><code>mPaint.setTextSize(textSize);</code>

<code>        </code><code>array.recycle(); </code><code>//TypedArray通常最後調用 .recycle() 方法,為了保持以後使用該屬性一緻性!</code>

<code>    </code><code>@Override</code>

<code>    </code><code>protected</code> <code>void</code> <code>onDraw(Canvas canvas) {</code>

<code>        </code><code>// TODO Auto-generated method stub</code>

<code>        </code><code>super</code><code>.onDraw(canvas);</code>

<code>        </code><code>mPaint.setStyle(Style.FILL);</code>

<code>        </code><code>canvas.drawRect(</code><code>new</code> <code>Rect(</code><code>10</code><code>, </code><code>10</code><code>, </code><code>300</code><code>, </code><code>500</code><code>), mPaint);</code>

<code>        </code><code>mPaint.setColor(Color.RED);</code>

<code>        </code><code>canvas.drawText(mString, </code><code>50</code><code>, </code><code>550</code><code>, mPaint);</code>

Layout更改如下

<code>&lt;RelativeLayout xmlns:android=</code><code>"http://schemas.android.com/apk/res/android"</code>

<code>    </code><code>xmlns:tools=</code><code>"http://schemas.android.com/tools"</code>

<code>    </code><code>xmlns:test=</code><code>"http://schemas.android.com/apk/res/com.example.customviewdemo"</code>

<code>    </code><code>android:layout_width=</code><code>"match_parent"</code>

<code>    </code><code>android:layout_height=</code><code>"match_parent"</code>

<code>    </code><code>tools:context=</code><code>".MainActivity"</code> <code>&gt;</code>

<code>    </code><code>&lt;com.example.customviewdemo.MyCustomView</code>

<code>        </code><code>android:layout_width=</code><code>"fill_parent"</code>

<code>        </code><code>android:layout_height=</code><code>"fill_parent"</code>

<code>        </code><code>test:textColor=</code><code>"#00ff00"</code>

<code>        </code><code>test:textSize=</code><code>"20sp"</code> <code>/&gt;</code>

<code>&lt;/RelativeLayout&gt;</code>

     2. test:textColor="#00ff00" test:textSize="20sp" 這兩個就是要調用的自定義屬性。

  效果如下圖:

  

Android 自定義View

本文轉自Work Hard Work Smart部落格園部落格,原文連結:http://www.cnblogs.com/linlf03/archive/2013/03/18/2958109.html,如需轉載請自行聯系原作者

繼續閱讀