package test.bwie.com.mycircle;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Region;
import android.util.AttributeSet;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
/**
* @ Description:
* @ Date:2017/5/6
* @ Author:刘刚
*/
public class DrawView extends View {
private Context mContext;
private int mWidth;
private int mHeight;
private int mR;
private int x,y;
private int screenWidth;
private int screenHeight;
private int mI;
private int mI1;
private int mI2;
private int mI3;
/* private OnClickListener mListener;
private onViewClick mViewClick;
private int startRawX;
private int startRawY;*/
public DrawView(Context context) {
super(context);
this.mContext=context;
}
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext=context;
}
public DrawView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.mContext=context;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mWidth = getWidth() / 2;
mHeight = getHeight() / 2;
mR = getWidth()/2;
/**
* 获取屏幕的宽高
*/
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();
canvas.drawColor(Color.RED);//为画布设置背景色
//创建画笔
Paint paint = new Paint();
paint.setColor(Color.YELLOW);//设置黑色
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
canvas.drawCircle(mWidth, mHeight, mR,paint);
Path path = new Path();
path.moveTo(getWidth()/2,getHeight()/2+ mWidth);// 此点为多边形的起点
path.lineTo(getWidth(), getHeight()/2);
path.lineTo(getWidth()/2,getHeight()/2- mWidth);
path.lineTo(0,getHeight()/2 );
path.close(); // 使这些点构成封闭的多边形
paint.setColor(Color.GREEN);//设置黑色
canvas.drawPath(path, paint);
Path p = new Path();
p.moveTo(getWidth()/4,getHeight()/2- mWidth /2);// 此点为多边形的起点
p.lineTo(getWidth()/4*3, getHeight()/2- mWidth /2);
p.lineTo(getWidth()/4*3,getHeight()/2+ mWidth /2);
p.lineTo(getWidth()/4,getHeight()/2+ mWidth /2 );
p.close(); // 使这些点构成封闭的多边形
paint.setColor(Color.BLUE);//设置黑色
RectF rectF = new RectF();
path.computeBounds(rectF,true);
Region region = new Region();
region.setPath(path,new Region((int)rectF.left,(int)rectF.top,(int)rectF.right,(int)rectF.bottom));
canvas.drawPath(p, paint);
Region rg = new Region();
rg.setPath(p,new Region((int)rectF.left,(int)rectF.top,(int)rectF.right,(int)rectF.bottom));
if (region.contains(x,y)&&!rg.contains(x,y)){
Toast.makeText(mContext,"菱形三角形",Toast.LENGTH_SHORT).show();
}
if ((x-getWidth()/2)*(x-getWidth()/2)+(y-getHeight()/2)*(y-getHeight()/2)<getWidth()/2*getWidth()/2&&!region.contains(x,y)){
Toast.makeText(mContext,"圆形三角形",Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
/* int rawX = (int) event.getRawX();
int rawY = (int) event.getRawY();*/
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
/* startRawX = rawX;
startRawY = rawY;*/
x= (int) event.getX();
y= (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
mI = getWidth()/4;
mI1 = getWidth()/4*3;
mI2 = getHeight()/2- mWidth /2;
mI3 = mHeight+mR/2;
if (x> mI &&x< mI1 &&y> mI2 &&y< mI3){
/* mListener.onClick(this);
mViewClick.onClick(rawX - startRawX, rawY - startRawY);*/
Toast.makeText(mContext, "这是蓝色", Toast.LENGTH_SHORT).show();
}
break;
}
this.invalidate();
return true;
}
/* public void setOnViewClick(onViewClick click) {
this.mViewClick = click;
}
@Override
public void setOnClickListener(OnClickListener l) {
mListener = l;
}
public interface onViewClick {
*//**
* @param scrollX 从按下到抬起,X轴方向移动的距离
* @param scrollY 从按下到抬起,Y轴方向移动的距离
*//*
void onClick(float scrollX, float scrollY);
}*/
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Region;
import android.util.AttributeSet;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
/**
* @ Description:
* @ Date:2017/5/6
* @ Author:刘刚
*/
public class DrawView extends View {
private Context mContext;
private int mWidth;
private int mHeight;
private int mR;
private int x,y;
private int screenWidth;
private int screenHeight;
private int mI;
private int mI1;
private int mI2;
private int mI3;
/* private OnClickListener mListener;
private onViewClick mViewClick;
private int startRawX;
private int startRawY;*/
public DrawView(Context context) {
super(context);
this.mContext=context;
}
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext=context;
}
public DrawView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.mContext=context;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mWidth = getWidth() / 2;
mHeight = getHeight() / 2;
mR = getWidth()/2;
/**
* 获取屏幕的宽高
*/
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();
canvas.drawColor(Color.RED);//为画布设置背景色
//创建画笔
Paint paint = new Paint();
paint.setColor(Color.YELLOW);//设置黑色
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
canvas.drawCircle(mWidth, mHeight, mR,paint);
Path path = new Path();
path.moveTo(getWidth()/2,getHeight()/2+ mWidth);// 此点为多边形的起点
path.lineTo(getWidth(), getHeight()/2);
path.lineTo(getWidth()/2,getHeight()/2- mWidth);
path.lineTo(0,getHeight()/2 );
path.close(); // 使这些点构成封闭的多边形
paint.setColor(Color.GREEN);//设置黑色
canvas.drawPath(path, paint);
Path p = new Path();
p.moveTo(getWidth()/4,getHeight()/2- mWidth /2);// 此点为多边形的起点
p.lineTo(getWidth()/4*3, getHeight()/2- mWidth /2);
p.lineTo(getWidth()/4*3,getHeight()/2+ mWidth /2);
p.lineTo(getWidth()/4,getHeight()/2+ mWidth /2 );
p.close(); // 使这些点构成封闭的多边形
paint.setColor(Color.BLUE);//设置黑色
RectF rectF = new RectF();
path.computeBounds(rectF,true);
Region region = new Region();
region.setPath(path,new Region((int)rectF.left,(int)rectF.top,(int)rectF.right,(int)rectF.bottom));
canvas.drawPath(p, paint);
Region rg = new Region();
rg.setPath(p,new Region((int)rectF.left,(int)rectF.top,(int)rectF.right,(int)rectF.bottom));
if (region.contains(x,y)&&!rg.contains(x,y)){
Toast.makeText(mContext,"菱形三角形",Toast.LENGTH_SHORT).show();
}
if ((x-getWidth()/2)*(x-getWidth()/2)+(y-getHeight()/2)*(y-getHeight()/2)<getWidth()/2*getWidth()/2&&!region.contains(x,y)){
Toast.makeText(mContext,"圆形三角形",Toast.LENGTH_SHORT).show();
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
/* int rawX = (int) event.getRawX();
int rawY = (int) event.getRawY();*/
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
/* startRawX = rawX;
startRawY = rawY;*/
x= (int) event.getX();
y= (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
mI = getWidth()/4;
mI1 = getWidth()/4*3;
mI2 = getHeight()/2- mWidth /2;
mI3 = mHeight+mR/2;
if (x> mI &&x< mI1 &&y> mI2 &&y< mI3){
/* mListener.onClick(this);
mViewClick.onClick(rawX - startRawX, rawY - startRawY);*/
Toast.makeText(mContext, "这是蓝色", Toast.LENGTH_SHORT).show();
}
break;
}
this.invalidate();
return true;
}
/* public void setOnViewClick(onViewClick click) {
this.mViewClick = click;
}
@Override
public void setOnClickListener(OnClickListener l) {
mListener = l;
}
public interface onViewClick {
*//**
* @param scrollX 从按下到抬起,X轴方向移动的距离
* @param scrollY 从按下到抬起,Y轴方向移动的距离
*//*
void onClick(float scrollX, float scrollY);
}*/
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<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"
>
<test.bwie.com.mycircle.DrawView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>