Esempio n. 1
0
  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    final float minAngle = (float) Math.PI / 8;
    final float maxAngle = (float) Math.PI * 7 / 8;

    float angle = minAngle;
    if (mRecorder != null)
      angle += (float) (maxAngle - minAngle) * mRecorder.getMaxAmplitude() / 32768;

    if (angle > mCurrentAngle) mCurrentAngle = angle;
    else mCurrentAngle = Math.max(angle, mCurrentAngle - DROPOFF_STEP);

    mCurrentAngle = Math.min(maxAngle, mCurrentAngle);

    float w = getWidth();
    float h = getHeight();
    float pivotX = w / 2;
    float pivotY = h - PIVOT_RADIUS - PIVOT_Y_OFFSET;
    float l = h * 4 / 5;
    float sin = (float) Math.sin(mCurrentAngle);
    float cos = (float) Math.cos(mCurrentAngle);
    float x0 = pivotX - l * cos;
    float y0 = pivotY - l * sin;
    canvas.drawLine(
        x0 + SHADOW_OFFSET,
        y0 + SHADOW_OFFSET,
        pivotX + SHADOW_OFFSET,
        pivotY + SHADOW_OFFSET,
        mShadow);
    canvas.drawCircle(pivotX + SHADOW_OFFSET, pivotY + SHADOW_OFFSET, PIVOT_RADIUS, mShadow);
    canvas.drawLine(x0, y0, pivotX, pivotY, mPaint);
    canvas.drawCircle(pivotX, pivotY, PIVOT_RADIUS, mPaint);

    if (mRecorder != null && mRecorder.state() == Recorder.RECORDING_STATE)
      postInvalidateDelayed(ANIMATION_INTERVAL);
  }