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><?xml version=</code><code>"1.0"</code> <code>encoding=</code><code>"utf-8"</code><code>?> </code>
<code> </code><code><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>> </code>
<code> </code><code><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>/> </code>
<code> </code><code><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>/></code>
<code> </code><code></LinearLayout></code>
<a href="http://my.eoe.cn/863210/archive/1205.html"> 參考</a>
其中Layout中的<com.example.customview.MyCustomView />就是對該自定義控件的使用。
在value檔案夾下建attrs.xml檔案。 定義了兩個屬性,分别為文本顔色和文本大小。
1
2
3
4
5
6
7
<code><?xml version=</code><code>"1.0"</code> <code>encoding=</code><code>"utf-8"</code><code>?></code>
<code><resources></code>
<code> </code><code><declare-styleable name=</code><code>"MyView"</code><code>></code>
<code> </code><code><attr name=</code><code>"textColor"</code> <code>format=</code><code>"color"</code> <code>/></code>
<code> </code><code><attr name=</code><code>"textSize"</code> <code>format=</code><code>"dimension"</code> <code>/></code>
<code> </code><code></declare-styleable></code>
<code></resources></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><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>></code>
<code> </code><code><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>/></code>
<code></RelativeLayout></code>
2. test:textColor="#00ff00" test:textSize="20sp" 這兩個就是要調用的自定義屬性。
效果如下圖:

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