效果图
布局中:
<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);
}
}