首页 > 代码库 > Android自定义View

Android自定义View

Android自定义View实现很简单

继承View,重写构造函数、onDraw,(onMeasure)等函数。

如果自定义的View需要有自定义的属性,需要在values下建立attrs.xml。在其中定义你的属性。

在使用到自定义View的xml布局文件中需要加入xmlns:前缀="http://schemas.android.com/apk/res/你的自定义View所在的包路径".

在使用自定义属性的时候,使用前缀:属性名,如my:textColor="#FFFFFFF"。

实例:

自定义View类:

package com.zst.service.component;import com.example.hello_wangle.R;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.util.Log;import android.view.View;import android.widget.TextView;public class MyTextView extends TextView {    //不能在布局文件中使用    public MyTextView(Context context) {        super(context);    }        //布局文件中用到此构造函数    public MyTextView(Context content, AttributeSet attrs){        super(content, attrs);        Paint paint = new Paint();        TypedArray array = content.obtainStyledAttributes(attrs, R.styleable.MyView);        int color = array.getColor(R.styleable.MyView_textColor, 0xFF00FF00);        float size = array.getDimension(R.styleable.MyView_textSize, 36);        paint.setColor(color);        paint.setTextSize(size);        Log.i("MyTextView", "color:" + color + "\t, size:" + size);                array.recycle();    }    //修改背景颜色    @Override    protected void onDraw(Canvas canvas) {        // TODO Auto-generated method stub        super.onDraw(canvas);        canvas.drawColor(Color.YELLOW);    }}

相应的属性文件attrs.xml:

<?xml version="1.0" encoding="utf-8"?><resources>    <declare-styleable name="MyView">        <attr name="textColor" format="color" />        <attr name="textSize" format="dimension" />        <attr name="textValue" format="string" />    </declare-styleable></resources>

在布局文件中使用:

<LinearLayout     xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:my="http://schemas.android.com/apk/res/com.example.hello_wangle"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    >    <TextView android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:id="@+id/definedTextView"         android:text="@string/app_name"/><com.zst.service.component.CounterView         android:layout_width="100dp"        android:layout_height="100dp"        />    <com.zst.service.component.MyTextView             android:layout_width="fill_parent"         android:layout_height="wrap_content"           my:textColor="#FFFFFFFF"           my:textSize="38sp"      />      </LinearLayout> 

 

Android自定义View