Esempio n. 1
1
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    float x = event.getX();
    float y = event.getY();
    if (isCanTouch && (event.getAction() == MotionEvent.ACTION_MOVE || isTouch(x, y))) {
      // 通过当前触摸点搞到cos角度值
      float cos = computeCos(x, y);
      // 通过反三角函数获得角度值
      if (x < getWidth() / 2) { // 滑动超过180度
        mCurAngle = Math.PI * RADIAN + Math.acos(cos) * RADIAN;
      } else { // 没有超过180度
        mCurAngle = Math.PI * RADIAN - Math.acos(cos) * RADIAN;
      }
      mCurProcess = getSelectedValue();

      float radius = (getWidth() - getPaddingLeft() - getPaddingRight() - mUnreachedWidth) / 2;
      mWheelCurX = calcXLocationInWheel(x, cos, radius);
      mWheelCurY = calcYLocationInWheel(cos, radius);
      if (mChangListener != null) {
        mChangListener.onChanged(this, mMaxProcess, mCurProcess);
      }
      invalidate();
      return true;
    } else {
      return super.onTouchEvent(event);
    }
  }
Esempio n. 2
0
  @SuppressLint("ClickableViewAccessibility")
  @Override
  public boolean onTouchEvent(@NonNull MotionEvent event) {
    // performClick();
    if (mRotateAnimationTask != null && mRotateAnimationTask.getStatus() == RUNNING) {
      return true;
    }
    float x = event.getX();
    float y = event.getY();
    //	Log.e("pointerPosition>>", pointerPosition + "");

    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        mListener.onStartTrackingTouch(this);

        return moved(x, y, false);

      case MotionEvent.ACTION_MOVE:
        mListener.onStartTrackingTouch(this);

        return moved(x, y, false);

      case MotionEvent.ACTION_UP:
        mListener.onStopTrackingTouch(this);
        return moved(x, y, true);
    }
    return false;
  }
Esempio n. 3
0
 public void setCurProcess(int curProcess) {
   this.mCurProcess = curProcess > mMaxProcess ? mMaxProcess : curProcess;
   if (mChangListener != null) {
     mChangListener.onChanged(this, mMaxProcess, curProcess);
   }
   invalidate();
 }
Esempio n. 4
0
  @Override
  protected void onRestoreInstanceState(Parcelable state) {
    if (state instanceof Bundle) {
      Bundle bundle = (Bundle) state;
      super.onRestoreInstanceState(bundle.getParcelable(INATANCE_STATE));
      mMaxProcess = bundle.getInt(INSTANCE_MAX_PROCESS);
      mCurProcess = bundle.getInt(INSTANCE_CUR_PROCESS);
      mReachedColor = bundle.getInt(INSTANCE_REACHED_COLOR);
      mReachedWidth = bundle.getFloat(INSTANCE_REACHED_WIDTH);
      isHasReachedCornerRound = bundle.getBoolean(INSTANCE_REACHED_CORNER_ROUND);
      mUnreachedColor = bundle.getInt(INSTANCE_UNREACHED_COLOR);
      mUnreachedWidth = bundle.getFloat(INSTANCE_UNREACHED_WIDTH);
      mPointerColor = bundle.getInt(INSTANCE_POINTER_COLOR);
      mPointerRadius = bundle.getFloat(INSTANCE_POINTER_RADIUS);
      isHasPointerShadow = bundle.getBoolean(INSTANCE_POINTER_SHADOW);
      mPointerShadowRadius = bundle.getFloat(INSTANCE_POINTER_SHADOW_RADIUS);
      isHasWheelShadow = bundle.getBoolean(INSTANCE_WHEEL_SHADOW);
      mPointerShadowRadius = bundle.getFloat(INSTANCE_WHEEL_SHADOW_RADIUS);
      isHasCache = bundle.getBoolean(INSTANCE_WHEEL_HAS_CACHE);
      isCanTouch = bundle.getBoolean(INSTANCE_WHEEL_CAN_TOUCH);
      initPaints();
    } else {
      super.onRestoreInstanceState(state);
    }

    if (mChangListener != null) {
      mChangListener.onChanged(this, mMaxProcess, mCurProcess);
    }
  }
Esempio n. 5
0
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    if (!isEnabled()) {
      return false;
    }

    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        onChangeListener.onStartTrackingTouch(this);
        setPressed(true);
        setSelected(true);
        break;
      case MotionEvent.ACTION_MOVE:
        super.onTouchEvent(event);
        int progress = getMax() - (int) (getMax() * event.getY() / getHeight());

        // Ensure progress stays within boundaries
        if (progress < 0) {
          progress = 0;
        }
        if (progress > getMax()) {
          progress = getMax();
        }
        setProgress(progress); // Draw progress
        if (progress != lastProgress) {
          // Only enact listener if the progress has actually changed
          lastProgress = progress;
          onChangeListener.onProgressChanged(this, progress, true);
        }

        onSizeChanged(getWidth(), getHeight(), 0, 0);
        setPressed(true);
        setSelected(true);
        break;
      case MotionEvent.ACTION_UP:
        onChangeListener.onStopTrackingTouch(this);
        setPressed(false);
        setSelected(false);
        break;
      case MotionEvent.ACTION_CANCEL:
        super.onTouchEvent(event);
        setPressed(false);
        setSelected(false);
        break;
    }
    return true;
  }
Esempio n. 6
0
 public synchronized void setProgressAndThumb(int progress) {
   setProgress(progress);
   onSizeChanged(getWidth(), getHeight(), 0, 0);
   if (progress != lastProgress) {
     // Only enact listener if the progress has actually changed
     lastProgress = progress;
     onChangeListener.onProgressChanged(this, progress, true);
   }
 }
 void onProgressRefresh(float scale, boolean fromUser) {
   Drawable thumb = mThumb;
   if (thumb != null) {
     setThumbPos(getHeight(), thumb, scale, Integer.MIN_VALUE);
     invalidate();
   }
   if (mOnSeekBarChangeListener != null) {
     mOnSeekBarChangeListener.onProgressChanged(this, getProgress(), fromUser);
   }
 }
Esempio n. 8
0
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    String tag = "Seekbar";
    Log.d(tag, event.toString());
    Log.d(tag, "------------");
    requestParentTouchRecursive(getParent(), true);

    if (!isEnabled()) {
      return false;
    }

    switch (event.getAction()) {
      case MotionEvent.ACTION_UP:
        onSeekBarChangeListener.onStopTrackingTouch(this);
        invalidate();
        requestParentTouchRecursive(getParent(), false);
        break;
      case MotionEvent.ACTION_DOWN:
        onSeekBarChangeListener.onStartTrackingTouch(this);
        invalidate();
        break;
      case MotionEvent.ACTION_MOVE:
        int pos = (int) (getMax() * event.getX() / getWidth());
        Log.d(tag, "pos => " + pos);
        setProgress(pos);
        onSeekBarChangeListener.onProgressChanged(this, pos, true);
        // onSizeChanged(getWidth(), getHeight(), 0, 0);
        invalidate();
        break;

      default:
      case MotionEvent.ACTION_CANCEL:
        onSeekBarChangeListener.onProgressChanged(this, getProgress(), true);
        requestParentTouchRecursive(getParent(), false);
        invalidate();
        break;
    }
    return true;
  }
Esempio n. 9
0
  private void setProgressInternal(int progress) {

    if (this.mProgress != progress) {
      this.mProgress = progress;
      if (!mFromUser) {
        int newPercent = (this.mProgress / this.mMaxProgress) * mMaxProgress;
        int newAngle = (newPercent / mMaxProgress) * TOTAL_DEGREES_INT;
        this.setAngle(newAngle);
        mProgressPercent = newPercent;
      }
      if (mIsProgressSetViaApi) {
        mAngle = mProgress * 360.0f / mMaxProgress;
      }
    }
    // Log.e("setProgressInternal", mProgressPercent + "...." + mProgress);
    mListener.onProgressChanged(this, mProgress, mFromUser);
    mFromUser = false;
  }
Esempio n. 10
0
 private void onStopTrackingTouch() {
   mIsDragging = false;
   if (mOnSeekBarChangeListener != null) {
     mOnSeekBarChangeListener.onStopTrackingTouch(this);
   }
 }
 void onStopTrackingTouch() {
   if (mOnSeekBarChangeListener != null) {
     mOnSeekBarChangeListener.onStopTrackingTouch(this);
   }
 }