欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 圆形按钮 判断点击的位置 显示不同的区域

程序员文章站 2022-05-31 13:54:38
...

公司开发项目  一个圆形的按钮 点击不同区域不同的作用,以为控件是长方形的   简单的拼接会有问题  所以通过坐标来判断点击的位置   阴影处即为点击区域 将圆均分为四块

Android 圆形按钮 判断点击的位置 显示不同的区域

public class CircleMenuImageView extends ImageView {

    private CircleCallback circleCallback;

    public CircleMenuImageView(Context context) {
        super(context);
    }

    public CircleMenuImageView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public CircleMenuImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                float x = event.getX();
                float y = event.getY();
                int area = 0;
                if (x < getWidth() / 2 && y < getHeight() / 2) {
                    if (x > y) {
                        area = 1;
                    } else {
                        area = 4;
                    }
                }
                else if (x > getWidth() / 2 && y < getHeight() / 2) {
                    if (getWidth()-x > y) {
                        area = 1;
                    } else {
                        area = 2;
                    }

                } else if (x < getWidth() / 2 && y > getHeight() / 2) {
                    if (getWidth()- y > x) {
                        area = 4;
                    } else {
                        area = 3;
                    }
                } else if (x > getWidth() / 2 && y > getHeight() / 2) {
                    if (x > y) {
                        area = 2;
                    } else {
                        area = 3;
                    }
                }
                Log.d("TTT", x + "-" + y);
                circleCallback.onAreaClick(area);
                break;
            case MotionEvent.ACTION_UP:
                circleCallback.onAreaFinish();
                break;
            default:
                return false;
        }
        return true;
    }

    public void setCircleCallback(CircleCallback circleCallback) {
        this.circleCallback = circleCallback;
    }
    
}

完整代码连接:https://download.csdn.net/download/weixin_36002948/10563535