Android Studio 自定义View(高亮点击)

代码展示

自定义类继承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;
    }
}

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值