第一種:oncreate裡啟動自定義view
Activity代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<code>import</code> <code>android.os.Bundle;</code>
<code>import</code> <code>android.app.Activity;</code>
<code>import</code> <code>android.view.Menu;</code>
<code>public</code> <code>class</code> <code>MainActivity </code><code>extends</code> <code>Activity</code>
<code>{</code>
<code> </code><code>/**</code>
<code> </code><code>* 兩種方法:</code>
<code> </code><code>* 1.直接在layout裡找到自定義控件</code>
<code> </code><code>* 2.oncreate裡啟動自定義view</code>
<code> </code><code>*/</code>
<code> </code><code>@Override</code>
<code> </code><code>protected</code> <code>void</code> <code>onCreate(Bundle savedInstanceState)</code>
<code> </code><code>{</code>
<code> </code><code>super</code><code>.onCreate(savedInstanceState);</code>
<code> </code>
<code> </code><code>//先new一個自定義view對象</code>
<code> </code><code>VerticalTextView view = </code><code>new</code> <code>VerticalTextView(</code><code>this</code><code>);</code>
<code> </code><code>setContentView(view);</code>
<code>// setContentView(R.layout.activity_main);</code>
<code> </code><code>}</code>
<code> </code>
<code> </code><code>public</code> <code>boolean</code> <code>onCreateOptionsMenu(Menu menu)</code>
<code> </code><code>getMenuInflater().inflate(R.menu.main, menu);</code>
<code> </code><code>return</code> <code>true</code><code>;</code>
<code>}</code>
View類代碼:
30
31
32
33
34
35
36
37
<code>import</code> <code>android.content.Context;</code>
<code>import</code> <code>android.graphics.Bitmap;</code>
<code>import</code> <code>android.graphics.BitmapFactory;</code>
<code>import</code> <code>android.graphics.Canvas;</code>
<code>import</code> <code>android.graphics.Color;</code>
<code>import</code> <code>android.graphics.Paint;</code>
<code>import</code> <code>android.view.View;</code>
<code>public</code> <code>class</code> <code>VerticalTextView </code><code>extends</code> <code>View</code>
<code> </code><code>//定義一個自定義角度的文本</code>
<code> </code><code>private</code> <code>Paint mPaint;</code>
<code> </code><code>public</code> <code>VerticalTextView(Context context)</code>
<code> </code><code>super</code><code>(context);</code>
<code> </code><code>init();</code>
<code> </code>
<code> </code><code>private</code> <code>void</code> <code>init()</code>
<code> </code><code>mPaint = </code><code>new</code> <code>Paint();</code>
<code> </code><code>mPaint.setColor(Color.BLUE);</code>
<code> </code><code>mPaint.setTextSize(</code><code>50</code><code>);</code>
<code> </code><code>mPaint.setAntiAlias(</code><code>true</code><code>);</code><code>//設定抗鋸齒</code>
<code> </code><code>protected</code> <code>void</code> <code>onDraw(Canvas canvas)</code>
<code> </code><code>super</code><code>.onDraw(canvas);</code>
<code> </code><code>Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bg);</code>
<code> </code>
<code> </code><code>canvas.rotate(</code><code>75</code><code>);</code>
<code>// canvas.rotate(60,bitmap.getWidth()*2 , bitmap.getHeight()*2);</code>
<code> </code><code>canvas.drawText(</code><code>"CanvasHello"</code><code>, </code><code>0</code><code>, </code><code>0</code><code>, mPaint);</code>
<code> </code><code>canvas.drawBitmap(bitmap, </code><code>0</code><code>, </code><code>0</code><code>, mPaint);</code>
第二種:直接在layout裡找到自定義控件(直接建立custom view)
1.建立attrs檔案,增加自定義屬性:
增加屬性内容:
<code><declare-styleable name=</code><code>"LabelView"</code><code>></code>
<code><attr name=</code><code>"text"</code> <code>format=</code><code>"string"</code> <code>/></code>
<code><attr name=</code><code>"textColor"</code> <code>format=</code><code>"color"</code> <code>/></code>
<code><attr name=</code><code>"textSize"</code> <code>format=</code><code>"dimension"</code> <code>/></code>
<code></declare-styleable></code>
或者:
<code><declare-styleable name=</code><code>"DraggableDot"</code><code>></code>
<code><attr name=</code><code>"radius"</code> <code>format=</code><code>"dimension"</code> <code>/></code>
<code><attr name=</code><code>"legend"</code> <code>format=</code><code>"string"</code> <code>/></code>
<code><attr name=</code><code>"anr"</code><code>></code>
<code> </code><code><</code><code>enum</code> <code>name=</code><code>"none"</code> <code>value=</code><code>"0"</code> <code>/></code>
<code> </code><code><</code><code>enum</code> <code>name=</code><code>"thumbnail"</code> <code>value=</code><code>"1"</code> <code>/></code>
<code> </code><code><</code><code>enum</code> <code>name=</code><code>"drop"</code> <code>value=</code><code>"2"</code> <code>/></code>
<code></attr></code>
範例:
<code><resources></code>
<code> </code><code><declare-styleable name=</code><code>"MyView"</code><code>></code>
<code> </code><code><attr name=</code><code>"mytext"</code> <code>format=</code><code>"string"</code> <code>/></code>
<code> </code><code><attr name=</code><code>"mytextColor"</code> <code>format=</code><code>"color"</code> <code>/></code>
<code> </code><code><attr name=</code><code>"mytextSize"</code> <code>format=</code><code>"dimension"</code> <code>/></code>
<code> </code><code></declare-styleable></code>
<code></resources></code>
2.增加自己的命名空間,将android修改為自己的包名:
<code><RelativeLayout xmlns:android=</code><code>"http://schemas.android.com/apk/res/android"</code>
<code>xmlns:MyView=</code><code>"http://schemas.android.com/apk/res/com.example.aexh23_paint_canvas"</code>
3.在layout中建立自定義view,設定自定義屬性(控件包名記得修改):
<code><com.example.aexh23_paint_canvas.VerticalTextView</code>
<code>android:id=</code><code>"@+id/verticalTextView1"</code>
<code>android:layout_width=</code><code>"wrap_content"</code>
<code>android:layout_height=</code><code>"wrap_content"</code>
<code>MyView:mytext=</code><code>"HelloWorld"</code>
<code>MyView:mytextColor=</code><code>"#654321"</code>
<code>MyView:mytextSize=</code><code>"35sp"</code>
<code>android:layout_centerHorizontal=</code><code>"true"</code>
<code>android:layout_centerVertical=</code><code>"true"</code> <code>/></code>
<code> </code><code>xmlns:MyView=</code><code>"http://schemas.android.com/apk/res/com.example.aexh23_paint_canvas"</code>
<code> </code><code>xmlns:tools=</code><code>"http://schemas.android.com/tools"</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.aexh23_paint_canvas.VerticalTextView</code>
<code> </code><code>android:id=</code><code>"@+id/verticalTextView1"</code>
<code> </code><code>android:layout_width=</code><code>"wrap_content"</code>
<code> </code><code>android:layout_height=</code><code>"wrap_content"</code>
<code> </code><code>MyView:mytext=</code><code>"HelloWorld"</code>
<code> </code><code>MyView:mytextColor=</code><code>"#654321"</code>
<code> </code><code>MyView:mytextSize=</code><code>"35sp"</code>
<code> </code><code>android:layout_centerHorizontal=</code><code>"true"</code>
<code> </code><code>android:layout_centerVertical=</code><code>"true"</code> <code>/></code>
<code></RelativeLayout></code>
4.在自定義view類中增加方法:
<code>setTextColor(a.getColor(R.styleable.LabelView_textColor, </code><code>0xFF000000</code><code>));</code>
<code>int</code> <code>textSize = a.getDimensionPixelOffset(R.styleable.LabelView_textSize, </code><code>0</code><code>);</code>
<code>if</code> <code>(textSize > </code><code>0</code><code>) {</code>
<code> </code><code>setTextSize(textSize);</code>
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<code> </code><code>* 系統範例:LabelView</code>
<code> </code><code>* 1.建立attrs檔案,增加屬性:</code>
<code> </code><code><declare-styleable name="LabelView"></code>
<code> </code><code><attr name="text" format="string" /></code>
<code> </code><code><attr name="textColor" format="color" /></code>
<code> </code><code><attr name="textSize" format="dimension" /></code>
<code> </code><code></declare-styleable></code>
<code> </code><code>//////////////////////////////////////////////</code>
<code> </code><code><declare-styleable name="DraggableDot"></code>
<code> </code><code><attr name="radius" format="dimension" /></code>
<code> </code><code><attr name="legend" format="string" /></code>
<code> </code><code><attr name="anr"></code>
<code> </code><code><enum name="none" value="0" /></code>
<code> </code><code><enum name="thumbnail" value="1" /></code>
<code> </code><code><enum name="drop" value="2" /></code>
<code> </code><code></attr></code>
<code> </code><code>////////////////////////////////////////////////</code>
<code> </code>
<code> </code><code>2.增加自己的命名空間,将android修改為自己的包名</code>
<code> </code><code><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"</code>
<code> </code><code>xmlns:MyView="http://schemas.android.com/apk/res/com.example.aexh23_paint_canvas"</code>
<code> </code><code>3.在layout中建立自定義view,增加屬性</code>
<code> </code><code><com.example.aexh23_paint_canvas.VerticalTextView</code>
<code> </code><code>android:id="@+id/verticalTextView1"</code>
<code> </code><code>android:layout_width="wrap_content"</code>
<code> </code><code>android:layout_height="wrap_content"</code>
<code> </code><code>MyView:mytext="HelloWorld"</code>
<code> </code><code>MyView:mytextColor="#654321"</code>
<code> </code><code>MyView:mytextSize="35sp"</code>
<code> </code><code>android:layout_centerHorizontal="true"</code>
<code> </code><code>android:layout_centerVertical="true" /></code>
<code> </code><code>4.在自定義view類中增加方法</code>
<code> </code><code>setTextColor(a.getColor(R.styleable.LabelView_textColor, 0xFF000000));</code>
<code> </code><code>int textSize = a.getDimensionPixelOffset(R.styleable.LabelView_textSize, 0);</code>
<code> </code><code>if (textSize > 0) {</code>
<code> </code><code>setTextSize(textSize);</code>
<code> </code><code>}</code>
<code> </code><code>private</code> <code>CharSequence s;</code>
<code> </code><code>private</code> <code>int</code> <code>c;</code>
<code> </code><code>private</code> <code>int</code> <code>d;</code>
<code> </code>
<code> </code><code>public</code> <code>VerticalTextView(Context context, AttributeSet attrs)</code>
<code> </code><code>super</code><code>(context, attrs);</code>
<code> </code><code>TypedArray a = context.obtainStyledAttributes(attrs,</code>
<code> </code><code>R.styleable.MyView);</code>
<code> </code><code>s = a.getString(R.styleable.MyView_mytext);</code>
<code> </code><code>c = a.getColor(R.styleable.MyView_mytextColor, </code><code>0xFF000000</code><code>);</code>
<code> </code><code>d = a.getDimensionPixelOffset(R.styleable.MyView_mytextSize, </code><code>0</code><code>);</code>
<code> </code><code>a.recycle();</code>
<code> </code><code>//定義畫筆</code>
<code> </code><code>mPaint.setColor(c );</code>
<code> </code><code>mPaint.setTextSize(d);</code>
<code> </code><code>mPaint.setAntiAlias(</code><code>true</code><code>);</code><code>// 設定抗鋸齒</code>
<code> </code><code>canvas.rotate(</code><code>30</code><code>);</code>
<code> </code><code>// canvas.rotate(60,bitmap.getWidth()*2 , bitmap.getHeight()*2);</code>
<code> </code><code>canvas.drawText(s.toString(), </code><code>0</code><code>, </code><code>0</code><code>, mPaint);</code>
<code></code>
本文轉自 glblong 51CTO部落格,原文連結:http://blog.51cto.com/glblong/1228552,如需轉載請自行聯系原作者