整理并总结自鸿洋的博客:http://blog.csdn.net/lmj623565791/article/details/24252901
一、不重写onMeasure,在res/layout/activity_main.xml中限定view的高度和宽度
com.cctvjiatao.customview01.act.MainActivity.java
/**
* 自定义View 第一课
* 1、自定义View的属性
* 2、在View的构造方法中获得第1步中的自定义属性
* 3、重写onMeasure(这一步可省略)
* 4、重写onDraw
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
res/values/ attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="title" format="string"/>
<attr name="titleColor" format="color"/>
<attr name="titleSize" format="dimension"/>
<declare-styleable name="AuthCode">
<attr name="title"/>
<attr name="titleColor"/>
<attr name="titleSize"/>
</declare-styleable>
</resources>
res/layout/ activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:authcode="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".act.MainActivity">
<com.cctvjiatao.customview01.view.AuthCode
android:layout_width="200dp"
android:layout_height="100dp"
authcode:title="9527"
authcode:titleColor="#ff0000"
authcode:titleSize="40sp" />
</RelativeLayout>
注意:在Android Studio中,使用的是xmlns:authcode="http://schemas.android.com/apk/res-auto",而在Eclipse中则应该使用xmlns:authcode="http://schemas.android.com/apk/res/com.cctvjiatao.customview01",即在res后的路径指向项目的package。
com.cctvjiatao.customview01.view.AuthCode.java
class AuthCode extends View {
private String mTitle;
private int mTitleColor;
private int mTitleSize;
private Rect mBound;
private Paint mPaint;
public AuthCode(Context context) {
this(context, null);
}
public AuthCode(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public AuthCode(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
/*
获得自定义属性
*/
TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.Aut