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 > |