自定义圆行点击(颜色也变)

来源:互联网 发布:甘肃网络机柜 编辑:程序博客网 时间:2024/04/27 23:14

效果图



布局中: 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
  >
<com.example.administrator.yn_yuan.CustomView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/c_view"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/c_text"
        android:textSize="20sp"
        android:layout_centerInParent="true"
        android:text="ewrfewt"
        android:layout_marginTop="10dp"/>


</RelativeLayout>



自定义圆

public class Custom_View 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 Custom_View(Context context) {
        super(context);
    }


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


    public Custom_View(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+width, paint);


        paint.setStyle(Paint.Style.STROKE);


        paint.setColor(Color.YELLOW);


        canvas.drawCircle(RX, RY, R+width, 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;
    }




}


activity类

public class MainActivity extends AppCompatActivity {


    private TextView tv;


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


    private void initView() {
        CustomView cv = (CustomView) findViewById(R.id.c_view);
        tv = (TextView) findViewById(R.id.c_text);


        cv.getOnWhat(new CustomView.SetOnWhat() {
            @Override
            public void onWhat(int type) {
                switch (type) {
                    case 0:
                        setText("这里是白色");


                    break;
                    case 1:
                        setText("这里是白色");


                        break;
                    case 2:
                        setText("这里是黄色");
                        break;
                    case 3:
                        setText("这里是绿色");
                        break;
                    case 4:
                        Intent intent =new Intent(MainActivity.this,NextActivity.class);
                        startActivity(intent);
                        break;
                    default:
                        break;
                }
            }
        });
    }
    private  void setText(String str){
        tv.setText(str);
    }
}

0 0