代码展示
自定义类继承VIew
package com.example.rikao_4;
import android.content.Context;
import android.content.res.TypedArray;
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.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
public class AttrsView extends View {
Paint paint1;
Paint paint2;
Paint paint3;
Paint paint4;
Path path;
Path path1;
Path path2;
Path path3;
Path path4;
int height;
int width;
Context context;
public AttrsView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
initPaint();
}
private void initPaint() {
//获取窗口对象
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics displayMetrics = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
height = displayMetrics.heightPixels;
width = displayMetrics.widthPixels;
paint1 = new Paint();
paint2 = new Paint();
paint3 = new Paint();
paint4 = new Paint();
path = new Path();
path1 = new Path();
path2 = new Path();
path3 = new Path();
path4 = new Path();
path1.moveTo(0, 0);
path1.lineTo(width / 2, height / 2);
path1.lineTo(width, 0);
paint1.setAntiAlias(true);
paint1.setStyle(Paint.Style.STROKE);
paint1.setColor(Color.RED);
paint1.setStrokeWidth(5);
path2.moveTo(0, 0);
path2.lineTo(width / 2, height / 2);
path2.lineTo(0, height);
paint2.setAntiAlias(true);
paint2.setStyle(Paint.Style.STROKE);
paint2.setColor(Color.BLUE);
paint2.setStrokeWidth(5);
path3.moveTo(0, height);
path3.lineTo(width / 2, height / 2);
path3.lineTo(width, height);
paint3.setAntiAlias(true);
paint3.setStyle(Paint.Style.STROKE);
paint3.setColor(Color.GREEN);
paint3.setStrokeWidth(5);
path4.moveTo(width, 0);
path4.lineTo(width / 2, height / 2);
path4.lineTo(width, height);
paint4.setAntiAlias(true);
paint4.setStyle(Paint.Style.STROKE);
paint4.setColor(Color.YELLOW);
paint4.setStrokeWidth(5);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPath(path1, paint1);
canvas.drawPath(path2, paint2);
canvas.drawPath(path3, paint3);
canvas.drawPath(path4, paint4);
}
int DownX, DownY;
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
DownX = x;
DownY = y;
//创建一个矩形
RectF rectF1 = new RectF();
RectF rectF2 = new RectF();
RectF rectF3 = new RectF();
RectF rectF4 = new RectF();
//分割矩形
path1.computeBounds(rectF1, true);
path2.computeBounds(rectF2, true);
path3.computeBounds(rectF3, true);
path4.computeBounds(rectF4, true);
//区域
Region region1 = new Region();
Region region2 = new Region();
Region region3 = new Region();
Region region4 = new Region();
//构建新区域
region1.setPath(path1, new Region((int) rectF1.left, (int) rectF1.top, (int) rectF1.right, (int) rectF1.bottom));
region2.setPath(path2, new Region((int) rectF2.left, (int) rectF2.top, (int) rectF2.right, (int) rectF2.bottom));
region3.setPath(path3, new Region((int) rectF3.left, (int) rectF3.top, (int) rectF3.right, (int) rectF3.bottom));
region4.setPath(path4, new Region((int) rectF4.left, (int) rectF4.top, (int) rectF4.right, (int) rectF4.bottom));
boolean c1 = region1.contains(DownX, DownY);
boolean c2 = region2.contains(DownX, DownY);
boolean c3 = region3.contains(DownX, DownY);
boolean c4 = region4.contains(DownX, DownY);
if (c1) {
paint1.setStyle(Paint.Style.FILL);
}
if (c2) {
paint2.setStyle(Paint.Style.FILL);
}
if (c3) {
paint3.setStyle(Paint.Style.FILL);
}
if (c4) {
paint4.setStyle(Paint.Style.FILL);
}
break;
}
invalidate();
return true;
}
}