android开发积累2-实现自定义android控件

android开发中,为了显示效果,大部分控件可能需要重新开发,一般来讲大部分自定义控件可以通过继承自一个android自身控件,重写ondraw来实现。

下面就以开发一个自定义的颜色渐变button为例,说明如果开发自定义控件。

自定义button的CButton.java

package Test.wangfu.controls;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.View;

public class CButton extends View {

    private int type = 0;    //定义一个类属性,可以用于在程序中指定,button的样式是矩形还是圆形,这样定义的属性
    //在xml中引用的时候,引用不到这个属性
    public CButton(Context context, AttributeSet attrs) {
        super(context, attrs);

        this.type=attrs.getAttributeIntValue(null, "type", 0);    //获取main.xml的cbutton定义的type属性值
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
        this.invalidate();   //更新区域
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        Paint paint = new Paint();
        // 消除锯齿
        paint.setAntiAlias(true);

        //设置为实心
        paint.setStyle(Style.FILL);

        //设置过滤渐变颜色
        Shader shader = new android.graphics.LinearGradient(0, 0, 100, 100,
                new int[] { Color.YELLOW, Color.BLUE, Color.RED }, null,
                Shader.TileMode.REPEAT);
        paint.setShader(shader);

       //如果等于0,绘一个圆形
        if (this.getType() == 0) {
            canvas.drawCircle(30, 30, 30, paint);
        }
        else
        {
            Rect r=new Rect();
            r.set(0, 0, 60, 60);
            canvas.drawRect(r, paint);
        }
    }
}

 

main.xml中添加控件

<Test.wangfu.controls.CButton
         android:id="@+id/cbutton1" 
         android:layout_width="wrap_content"          
         android:layout_height="100px"       
         type="1"
    />

 

//在程序中修改自定义的type属性

final Test.wangfu.controls.CButton cbutton=(CButton)this.findViewById(R.id.cbutton1);
cbutton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if (cbutton.getType() == 0) {
                    cbutton.setType(1);
                } else {
                    cbutton.setType(0);
                }
            }
        });

 

上面一个可以有两种展示状态的自定义button控件就基本完成了。

 

你可能感兴趣的:(android控件,实现自定义android控件)