TempControlView icon indicating copy to clipboard operation
TempControlView copied to clipboard

建议添加OnStartChangeListener/OnEndChangeListener/OnChangeListener

Open pickle780 opened this issue 1 year ago • 0 comments

    /**
     * 设置开始温度改变监听
     *
     * @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的问题,我随便,反正我项目重点不是这个

pickle780 avatar Jun 09 '24 07:06 pickle780