自定义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>
[]
更多精彩
赞助商链接