1.首先,在values文件夹下定义一个atts.xml的文件,描述自定义的控件的属性,在values/attrs.xml中的代码如下:
1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3 <declare-styleable name="TestView">
4 <attr name="textColor" format="color" />
5 <attr name="textSize" format="dimension"/>
6 <attr name="imgBackground" format="integer"/>
7 <attr name="textPaddionLeft" format="dimension"/>
8 <attr name="textPaddingTop" format="dimension"/>
9 </declare-styleable>
10 </resources>
2.其次,定义一个继承自View的类,如:TestView,使其实现View的方法
1 package com.vanceinfo.testview;
2
3 import android.content.Context;
4 import android.content.res.TypedArray;
5 import android.graphics.Canvas;
6 import android.graphics.Color;
7 import android.graphics.Paint;
8 import android.util.AttributeSet;
9 import android.view.View;
10
11 public class TestView extends View
12 {
13 private Paint mPaint;
14
15 private Context mContext;
16
17 private String mStr;
18
19 public TestView(Context context, AttributeSet attrs)
20 {
21 // 构造方法;根据需要实现继承自View的方法
22 super(context, attrs);
23 mContext = context;
24 initTestView();
25 // 对于我们自定义的类中,我们需要使用一个名为obtainStyledAttributes的方法来获取我们的定义
26 TypedArray params = context.obtainStyledAttributes(attrs, R.styleable.TestView);
27 // 得到自定义控件的属性值。
28 int backgroundId = params.getResourceId(R.styleable.TestView_imgBackground, 0);
29 if (backgroundId != 0)
30 {
31 setBackgroundResource(backgroundId);
32 int textColor = params.getColor(R.styleable.TestView_textColor, 0XFFFFFFFF);
33 setTextColor(textColor);
34 float textSize = params.getDimension(R.styleable.TestView_textSize, 36);
35 setTextSize(textSize);
36 float padingLeft = params.getDimension(R.styleable.TestView_textPaddionLeft, 41);
37 float padingTop = params.getDimension(R.styleable.TestView_textPaddingTop, 21);
38 setPaddings(padingLeft, padingTop);
39 }
40 }
41
42 @Override
43 protected void onDraw(Canvas canvas)
44 {
45 super.onDraw(canvas);
46 if (mStr != null)
47 {
48 canvas.drawText(mStr, 30, 60, mPaint);
49 }
50 }
51
52 private void setPaddings(float padingLeft, float padingTop)
53 {
54 setPadding((int) padingLeft, (int) padingTop, 0, 0);
55 }
56
57 private void setTextColor(int textColor)
58 {
59 mPaint.setColor(0XFFAABBCC);
60 }
61
62 void setText(String text)
63 {
64 mStr = text;
65 }
66
67 private void setTextSize(float textSize)
68 {
69 mPaint.setTextSize(textSize);
70 }
71
72 private void initTestView()
73 {
74 mPaint = new Paint();
75 mPaint.setColor(Color.WHITE);
76 }
77
78 }
3.然后,在Layout文件中应用该自定义的view,如下:
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schmeas.android.com/apk/res/ com.vanceinfo.testview.TestView"
4 android:orientation="vertical"
5 android:layout_width="fill_parent"
6 android:layout_height="fill_parent"
7 >
8 <com.vanceinfo.testview.TestView
9 android:id="@+id/testview"
10 android:layout_width="fill_parent"
11 android:layout_height="fill_parent"
12 android:text="@string/hello"
13 app:textColor="#FFFFFFFF"
14 app:textSize="40dip"
15 app:textPaddingLeft="40dip"
16 app:textPaddingTop="40dip"
17 app:imgBackground="@drawable/beginhelp1"
18 />
19 </LinearLayout>
4.然后就是使用了,在自己的Activity 中
1 package com.vanceinfo.testview;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5
6 public class TestViewActivity extends Activity
7 {
8 /** Called when the activity is first created. */
9 @Override
10 public void onCreate(Bundle savedInstanceState)
11 {
12 super.onCreate(savedInstanceState);
13 setContentView(R.layout.main);
14
15 TestView mTestView = (TestView) findViewById(R.id.testview);
16 mTestView.setText("这是自定义的View");
17 }
18 }
5效果图:
![](data:image/png;base64,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xAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgAhiBkQQMyCCmAERxAyIIGZABDEDIogZEEHMgIibmAH87YgZEPH/CBvdEtaW5/wAAAAASUVORK5CYII=)