示例#1
0
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
   int size =
       Math.min(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec));
   mLockDimensions.size = size;
   mLockDimensions.update();
   setMeasuredDimension(size, size);
 }
示例#2
0
 private void setDown(boolean newDown) {
   this.mDown = newDown;
   if (!newDown) {
     mLockDimensions.tintSize = 0;
     mDownCount = 0;
     mShadowInterpolator = null;
   }
   invalidateLock();
 }
示例#3
0
  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.drawCircle(
        mLockDimensions.circleX,
        mLockDimensions.circleY,
        mLockDimensions.circleRadius,
        isEnabled()
            ? isLocked() ? mLockedBackgroundPaint : mUnlockedBackgroundPaint
            : mDisabledBackgroundPaint);
    canvas.drawRoundRect(
        mLockDimensions.lockLeftX,
        mLockDimensions.lockTopY,
        mLockDimensions.lockRightX,
        mLockDimensions.lockBottomY,
        mLockDimensions.strokeWidth,
        mLockDimensions.strokeWidth,
        mLockPaint);
    canvas.drawCircle(
        mLockDimensions.keyHoleX,
        mLockDimensions.keyHoleY,
        mLockDimensions.keyHoleRadius,
        mLockPaint);
    canvas.drawLine(
        mLockDimensions.handleSideLeftX,
        mLockDimensions.handleLeftSideBottomY,
        mLockDimensions.handleSideLeftX,
        mLockDimensions.handleSideTopY,
        mLockPaint);
    canvas.drawLine(
        mLockDimensions.handleSideRightX,
        mLockDimensions.handleRightSideBottomY,
        mLockDimensions.handleSideRightX,
        mLockDimensions.handleSideTopY,
        mLockPaint);
    canvas.drawArc(
        mLockDimensions.handleArcLeftX,
        mLockDimensions.handleArcTopY,
        mLockDimensions.handleArcRightX,
        mLockDimensions.handleArcBottomY,
        180f,
        180f,
        false,
        mLockPaint);
    canvas.drawCircle(
        mLockDimensions.circleX, mLockDimensions.circleY, mLockDimensions.tintSize, mShadowPaint);

    if (isDown()) {
      if (mShadowInterpolator == null) {
        mShadowInterpolator = new Interpolator();
      }
      mLockDimensions.tintSize =
          mShadowInterpolator.getInterpolation() * mLockDimensions.circleRadius;
      if (mLockDimensions.tintSize < mLockDimensions.circleRadius) {
        postInvalidateDelayed(FPS);
      }
    } else if (mAnimateLock) {
      if (mAnimationInterpolator == null) {
        mAnimationInterpolator = new Interpolator();
      }
      if (isLocked()) {
        mLockDimensions.animateHandle =
            (1 - mAnimationInterpolator.getInterpolation()) * mLockDimensions.handleRightSideLength;
        mLockDimensions.update();
        if (mLockDimensions.animateHandle > 0) {
          postInvalidateDelayed(FPS);
        } else {
          mAnimateLock = false;
        }
      } else {
        mLockDimensions.animateHandle =
            mAnimationInterpolator.getInterpolation() * mLockDimensions.handleRightSideLength;
        mLockDimensions.update();
        if (mLockDimensions.animateHandle < mLockDimensions.handleRightSideLength * 2.0) {
          postInvalidateDelayed(FPS);
        } else {
          mAnimateLock = false;
        }
      }
    }
  }