Android教程中自定义View的学习,对于初学着来说,他们习惯了Android传统的页面布局方式,如下代码:
当然上面的布局方式可以帮助我们完成简单应用的开发了,但是如果你想写一个复杂的应用,这样就有点牵强了,大家不信可以下源码都研究看看,高手写的布局方式,如上面的布局高手通常是这样写的:
其中A extends LinerLayout, B extends TextView.
然后将我们自定义的View加入到main.xml布局文件中,代码如下:
最后执行之,效果如下图:
01 | <?xml version= "1.0" encoding= "utf-8" ?> |
02 | <LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" |
03 | android:orientation= "vertical" |
04 | android:layout_width= "fill_parent" |
05 | android:layout_height= "fill_parent" |
06 | > |
07 | <TextView |
08 | android:layout_width= "fill_parent" |
09 | android:layout_height= "wrap_content" |
10 | android:text= "@string/hello" |
11 | /> |
12 | </LinearLayout> |
1 | <? xml version = "1.0" encoding = "utf-8" ?> |
2 | < A > |
3 | < B ></ B > |
4 | </ A > |
为了帮助大家更容易理解,我写了一个简单的Demo,具体步骤如下:
首先新建一个Android 工程 命名为ViewDemo.
然后自定义一个View类,命名为MyView(extends View).代码如下:
01 | package com.android.tutor; |
02 | import android.content.Context; |
03 | import android.graphics.Canvas; |
04 | import android.graphics.Color; |
05 | import android.graphics.Paint; |
06 | import android.graphics.Rect; |
07 | import android.graphics.Paint.Style; |
08 | import android.util.AttributeSet; |
09 | import android.view.View; |
10 | public class MyView extends View { |
11 | private Paint mPaint; |
12 | private Context mContext; |
13 | private static final String mString = "Welcome to Mr Wei's blog" ; |
14 |
15 | public MyView(Context context) { |
16 | super (context); |
17 | } |
18 | public MyView(Context context,AttributeSet attr) |
19 | { |
20 | super (context,attr); |
21 | } |
22 | @Override |
23 | protected void onDraw(Canvas canvas) { |
24 | // TODO Auto-generated method stub |
25 | super .onDraw(canvas); |
26 | mPaint = new Paint(); |
27 | //设置画笔颜色 |
28 | mPaint.setColor(Color.RED); |
29 | //设置填充 |
30 | mPaint.setStyle(Style.FILL); |
31 | //画一个矩形,前俩个是矩形左上角坐标,后面俩个是右下角坐标 |
32 | canvas.drawRect( new Rect( 10 , 10 , 100 , 100 ), mPaint); |
33 | mPaint.setColor(Color.BLUE); |
34 | //绘制文字 |
35 | canvas.drawText(mString, 10 , 110 , mPaint); |
36 | } |
37 | } |
01 | <? xml version = "1.0" encoding = "utf-8" ?> |
02 | < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" |
03 | android:orientation = "vertical" |
04 | android:layout_width = "fill_parent" |
05 | android:layout_height = "fill_parent" |
06 | > |
07 | < TextView |
08 | android:layout_width = "fill_parent" |
09 | android:layout_height = "wrap_content" |
10 | android:text = "@string/hello" |
11 | /> |
12 | < com.android.tutor.MyView |
13 | android:layout_width = "fill_parent" |
14 | android:layout_height = "fill_parent" |
15 | /> |
16 | </ LinearLayout > |