WEB开发网
开发学院手机开发Android 开发 自定义Android View组件 阅读

自定义Android View组件

 2011-01-11 08:17:25 来源:WEB开发网   
核心提示:Android提供了强大的可复用组件,但特殊情况需要自己的自定义的View组件,自定义Android View组件,下面自定义一个View,首先在values/attrs.xml中定义好自定义的View会有哪些属性需要在XML中配置:<?xml version="1.0" encoding=&

Android提供了强大的可复用组件,但特殊情况需要自己的自定义的View组件,下面自定义一个View。

首先在values/attrs.xml中定义好自定义的View会有哪些属性需要在XML中配置:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView">
<attr name="textColor" format="color" />
<attr name="textSize" format="dimension" />
<!--在attrs中定义background-->
<attr name="imgBackground" format="integer" />
<attr name="textPaddingLeft" format="dimension"/>
<attr name="textPaddingTop" format="dimension"/>
</declare-styleable>
</resources>

编写自定义的View-MyView.java,继承View

package test.cuntomizedview;
import java.util.Calendar;
import test.cuntomizedview.R;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.View;
public class MyView extends View {
	private Paint mPaint;
	private Context mContext;
	private String mStr;
	/* 如果需要在配置文件中使用该自定义组件,注意一定要重写public **View(Context context, AttributeSet attrs)的构造方法,而不是public **View(Context context)。如果只需要在程序中利用代码使用该组件可以只覆写public **View(Context context)*/
	public MyView(Context context, AttributeSet attrs) {
		super(context, attrs);
		mContext = context;
		initMyView();
		/*获取在xml中配置的属性值*/
		TypedArray params = context.obtainStyledAttributes(attrs,R.styleable.MyView);
		//取得background
		int backgroudId = params.getResourceId(R.styleable.MyView_imgBackground, 0);
		if (backgroudId != 0)
			setBackgroundResource(backgroudId);
		int textColor = params.getColor(R.styleable.MyView_textColor,0XFFFFFFFF);
		setTextColor(textColor);
		float textSize = params.getDimension(R.styleable.MyView_textSize, 36);
		setTextSize(textSize);
		float paddingLeft = params.getDimension(R.styleable.MyView_textPaddingLeft, 41);
		float paddingTop = params.getDimension(R.styleable.MyView_textPaddingTop, 21);
		setPaddings(paddingLeft, paddingTop);
	}
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		if(mStr != null) {
			canvas.drawText(mStr, 0, 0, mPaint);
		}
		canvas.drawText("heiheihei", 30, 60, mPaint);
	}
	private void initMyView() {
		mPaint = new Paint();
		mPaint.setColor(Color.WHITE);
	}
	private void setTextColor(int textColor) {
		mPaint.setColor(0XFFAABBCC);
	}
	private void setTextSize(float textSize) {
		mPaint.setTextSize(textSize);
	}
	private void setPaddings(float paddingLeft, float paddingTop) {
		setPadding((int)paddingLeft, (int)paddingTop, 0, 0);
	}
}
// 注意怎样在attrs中怎样定义background并取得background。

在layout中使用MyView,main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/test.cuntomizedview" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<test.cuntomizedview.MyView android:id="@+id/v" android:layout_width="fill_parent" android:layout_height="fill_parent" app:textColor="#FFFFFFFF" app:textSize="40dip" app:textPaddingLeft="40dip" app:textPaddingTop="40dip" app:imgBackground="@drawable/bg_time" />
</LinearLayout>

Tags:Android View

编辑录入:coldstar [复制链接] [打 印]
赞助商链接