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);