@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); } }
@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; }
public void setCurProcess(int curProcess) { this.mCurProcess = curProcess > mMaxProcess ? mMaxProcess : curProcess; if (mChangListener != null) { mChangListener.onChanged(this, mMaxProcess, curProcess); } invalidate(); }
@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); } }
@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; }
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); } }
@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; }
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; }
private void onStopTrackingTouch() { mIsDragging = false; if (mOnSeekBarChangeListener != null) { mOnSeekBarChangeListener.onStopTrackingTouch(this); } }
void onStopTrackingTouch() { if (mOnSeekBarChangeListener != null) { mOnSeekBarChangeListener.onStopTrackingTouch(this); } }