画圆

//布局文件
<com.example.administrator.yuanyuekao.MyView
    android:id="@+id/cv"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/tv_color"
    android:textSize="20sp"
    android:layout_centerInParent="true"
    android:text="ewrfewt"
    android:layout_marginTop="10dp"/>

//工具类
public class MyView extends View {
    private SetOnWhat sow;
    private int one;
    private int two;
    private int three;

    private int RX;
    private int RY;
    private float width;
    private int rect;

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

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

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

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

        int x = getWidth();
        int y = getHeight();

        rect = x*3/4;
        int R = rect*8/25;
        width = R*3/8;

        RX = x/2;
        RY = y/2;

        int r = rect/2 - (int) (width*2);

        one = r;
        two = (int) (r+width);
        three = (int)(r+width*2);

        int left = (x - rect)/2;
        int right = left + rect;
        int top = (y - rect)/2;
        int bottom = top + rect;

        Paint paint = new Paint();
        paint.setColor(Color.GREEN);

        paint.setStrokeWidth(width);
        paint.setAntiAlias(true);

        canvas.drawRect(left, top, right, bottom, paint);

        paint.setColor(Color.WHITE);
        canvas.drawCircle(RX, RY, r, paint);

        paint.setStyle(Paint.Style.STROKE);

        paint.setColor(Color.RED);

        canvas.drawCircle(RX, RY, R, paint);

        paint.setColor(Color.BLUE);

        canvas.drawCircle(RX, RY, R+width, paint);

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int x = (int) event.getX();
        int y = (int) event.getY();
        float rawX = event.getRawX();
        float rawY = event.getRawY();
        int action = event.getAction();

        if(action==MotionEvent.ACTION_DOWN||action==MotionEvent.ACTION_MOVE){
            if (x + getLeft() < getRight() && y + getTop() < getBottom()) {
                int type = 0;
                int distance = getDistance(x, y);

                if(distance<=one*one){
                    type = 0;
                }else if(distance>one&&distance<=two*two){
                    type = 1;
                }else if(distance>two&&distance<=three*three){
                    type = 2;
                }else if(x>=(RX - rect/2)&&x<=(RX + rect/2)&&y>=(RY - rect/2)&&y<=(RY+rect/2)){
                    type = 3;
                }else {
                    type = 4;
                }

                if(sow!=null){
                    sow.onWhat(type);
                }
            }
        }
        return true;
    }

    private int getDistance(int x, int y){
        return (x-RX)*(x-RX) + (y-RY)*(y-RY);
    }

    public interface SetOnWhat{
        void onWhat(int type);
    }

    public void getOnWhat(SetOnWhat sow){
        this.sow = sow;
    }




//具体画圆

public class MainActivity extends AppCompatActivity {
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = (TextView) findViewById(R.id.tv_color);
        setText("内圆");
        MyView cv = (MyView) findViewById(R.id.cv);

        cv.getOnWhat(new MyView.SetOnWhat() {
            @Override
            public void onWhat(int type) {
                switch (type) {
                    case 0:
                        Toast.makeText(MainActivity.this, "这里是白色", Toast.LENGTH_SHORT).show();


                        break;
                    case 1:
                        Toast.makeText(MainActivity.this, "这里是红色", Toast.LENGTH_SHORT).show();
                        startActivity(new Intent(MainActivity.this,Next.class));
                        break;
                    case 2:
                        Toast.makeText(MainActivity.this, "这里是蓝色", Toast.LENGTH_SHORT).show();
                        break;
                    case 3:
                        Toast.makeText(MainActivity.this, "这里是绿色", Toast.LENGTH_SHORT).show();
                        break;
                    case 4:
                        Toast.makeText(MainActivity.this, "这..这里是哪里?", Toast.LENGTH_SHORT).show();
                        break;
                    default:
                        break;
                }
            }
        });

    }

    private void setText(String message){
        tv.setText(message);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值