Skip to content

建议添加OnStartChangeListener/OnEndChangeListener/OnChangeListener #7

Description

@pickle780
    /**
     * 设置开始温度改变监听
     *
     * @param onStartChangeListener 监听接口
     */
    public void setOnStartChangeListener(OnStartChangeListener onStartChangeListener) {
        this.onStartChangeListener = onStartChangeListener;
    }

    /**
     * 设置温度改变监听
     *
     * @param onChangeListener 监听接口
     */
    public void setOnChangeListener(OnChangerListener onChangeListener) {
        this.onChangeListener = onChangeListener;
    }

    /**
     * 设置结束温度改变监听
     *
     * @param onEndChangeListener 监听接口
     */
    public void setOnEndChangeListener(OnEndChangeListener onEndChangeListener) {
        this.onEndChangeListener = onEndChangeListener;
    }

    /**
     * 设置点击监听
     *
     * @param onClickListener 点击回调接口
     */
    public void setOnClickListener(OnClickListener onClickListener) {
        this.onClickListener = onClickListener;
    }

    /**
     * 温度开始改变监听接口
     */
    public interface OnStartChangeListener {
        /**
         * 回调方法
         *
         * @param temp 温度
         */
        void change(int temp);
    }

    /**
     * 温度改变监听接口
     */
    public interface OnChangerListener {
        /**
         * 回调方法
         *
         * @param temp 温度
         */
        void change(int temp);
    }

    /**
     * 温度结束改变监听接口
     */
    public interface OnEndChangeListener {
        /**
         * 回调方法
         *
         * @param temp 温度
         */
        void change(int temp);
    }

    /**
     * 点击回调接口
     */
    public interface OnClickListener {
        /**
         * 点击回调方法
         *
         * @param temp 温度
         */
        void onClick(int temp);
    }

添加一个变量用来控制startChange

    private boolean startChange;

然后还有修改onTouchEvent

   @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (!canRotate) {
            return super.onTouchEvent(event);
        } else {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    isDown = true;
                    if(onStartChangeListener != null && startChange == false){
                        onStartChangeListener.change(temperature);
                        startChange = true;
                    }

                    float downX = event.getX();
                    float downY = event.getY();
                    currentAngle = calcAngle(downX, downY);
                    break;

                case MotionEvent.ACTION_MOVE:
                    isMove = true;
                    float targetX;
                    float targetY;
                    downX = targetX = event.getX();
                    downY = targetY = event.getY();
                    float angle = calcAngle(targetX, targetY);

                    // 滑过的角度增量
                    float angleIncreased = angle - currentAngle;

                    // 防止越界
                    if (angleIncreased < -270) {
                        angleIncreased = angleIncreased + 360;
                    } else if (angleIncreased > 270) {
                        angleIncreased = angleIncreased - 360;
                    }

                    IncreaseAngle(angleIncreased);
                    currentAngle = angle;
                    invalidate();
                    if(onChangeListener != null)
                        onChangeListener.change(temperature);
                    break;

                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_UP: {
                    if (isDown) {
                        startChange = false;
                        if (isMove) {
                            // 纠正指针位置
                            rotateAngle = (float) ((temperature - minTemp) * angleRate * angleOne);
                            invalidate();
                            // 回调温度改变监听
                            if (onEndChangeListener != null) {
                                onEndChangeListener.change(temperature);
                            }
                            isMove = false;
                        } else {
                            // 点击事件
                            if (onClickListener != null) {
                                onClickListener.onClick(temperature);
                            }
                        }
                        isDown = false;
                    }
                    break;
                }
            }
            return true;
        }
    }

我比较懒,懒得branches,就直接issue提了
然后我这么写会有个click会响应start的问题,我随便,反正我项目重点不是这个

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions