自定义view画圆

来源:互联网 发布:mac桌面 编辑:程序博客网 时间:2024/05/29 16:56
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;


public class MyView extends View{

    //声明画笔
    Paint paint;

    OnClickListener onClickListener;

    onClicl onClicl;


    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyView(Context context) {
        super(context);
    }


    //需要三个方法

    //测量高度和宽度
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }


    //画布
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        circle(canvas);
    }


    //位置
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
    }


    //绘制圆的方法
    public void circle(Canvas canvas){


        //实例化画笔
        paint = new Paint();
        //设置颜色
        paint.setColor(Color.RED);
        //设置画笔宽度
        paint.setStrokeWidth(5);
        //设置抗锯齿
        paint.setAntiAlias(true);
        //设置空心圆
        paint.setStyle(Paint.Style.STROKE);

        //绘制圆
        canvas.drawCircle(getWidth()/2,getHeight()/2,100,paint);

        //设置画笔宽度
        paint.setStrokeWidth(1);
        //设置字体大小
        paint.setTextSize(40);
        //获取子图的宽度
        String name = "李";
        float width = paint.measureText(name,0,name.length());

        Rect rect = new Rect();
        paint.getTextBounds(name,0,name.length(), rect);
        float height = rect.height();

        //绘制文字
        canvas.drawText(name,getWidth()/2-width/2,getHeight()/2+height/2,paint);
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {


        switch (event.getAction()){

            case MotionEvent.ACTION_DOWN:

                float x = event.getX();
                float y = event.getY();

                //首先转换坐标位置

                int x1 = (int) (x - getWidth()/2);
                int y1 = (int) (y - getHeight()/2);


                if(x1*x1+y1*y1<100*100){//点击成功

                    if(null != onClickListener){
                        onClickListener.OnClickListener();
                    }

                    if (null != onClicl){
                        onClicl.onClicl();
                    }

                }

                //event.getRawX();//绝对的


                break;
        }

        return true;
    }

    //接口回调方式
    //1:抽象类
    //2:观察者模式

    //观察者模式
    //1:声明一个接口
    //2:声明接口的对象
    //3:定义一个方法

    public interface OnClickListener{

        public void OnClickListener();

    }

    public void setOnClickLisener(OnClickListener onClickLisener){
        this.onClickListener = onClickLisener;
    }


    //接口回调
    public void setOnClickLisener(onClicl onClickLisener){
        this.onClicl = onClickLisener;
    }

    public abstract class  onClicl{

        public abstract void onClicl();
    }
}

0 0
原创粉丝点击