diff options
-rw-r--r-- | res/values/dimens.xml | 2 | ||||
-rw-r--r-- | src/com/android/camera/ui/PieRenderer.java | 25 | ||||
-rw-r--r-- | src/com/android/camera/ui/ProgressRenderer.java | 86 |
3 files changed, 100 insertions, 13 deletions
diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 692a87fbf..e2d4246df 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -74,6 +74,8 @@ <dimen name="effect_setting_type_text_left_padding_xlarge">26dp</dimen> <dimen name="onscreen_indicators_height_xlarge">36dp</dimen> <dimen name="onscreen_exposure_indicator_text_size_xlarge">18dp</dimen> + <dimen name="pie_progress_radius">25dp</dimen> + <dimen name="pie_progress_width">3dp</dimen> <dimen name="pie_radius_start">80dp</dimen> <dimen name="pie_radius_increment">48dp</dimen> <dimen name="pie_touch_slop">12dp</dimen> diff --git a/src/com/android/camera/ui/PieRenderer.java b/src/com/android/camera/ui/PieRenderer.java index 3967f7946..58bee94d6 100644 --- a/src/com/android/camera/ui/PieRenderer.java +++ b/src/com/android/camera/ui/PieRenderer.java @@ -42,10 +42,13 @@ import android.view.animation.Transformation; import com.android.camera.drawable.TextDrawable; import com.android.camera2.R; +/** + * An overlay renderer that is used to display focus state and progress state. + */ public class PieRenderer extends OverlayRenderer implements FocusIndicator { - private static final String TAG = "CAM Pie"; + private static final String TAG = "PieRenderer"; // Sometimes continuous autofocus starts and stops several times quickly. // These states are used to make sure the animation is run for at least some @@ -143,7 +146,7 @@ public class PieRenderer extends OverlayRenderer private int mAngleZone; private float mCenterAngle; - + private ProgressRenderer mProgressRenderer; private Handler mHandler = new Handler() { public void handleMessage(Message msg) { @@ -226,6 +229,7 @@ public class PieRenderer extends OverlayRenderer mLabel.setDropShadow(true); mDeadZone = res.getDimensionPixelSize(R.dimen.pie_deadzone_width); mAngleZone = res.getDimensionPixelSize(R.dimen.pie_anglezone_width); + mProgressRenderer = new ProgressRenderer(ctx); } private PieItem getRoot() { @@ -308,6 +312,10 @@ public class PieRenderer extends OverlayRenderer return mState == STATE_PIE && isVisible(); } + public void setProgress(int percent) { + mProgressRenderer.setProgress(percent); + } + private void fadeIn() { mFadeIn = new ValueAnimator(); mFadeIn.setFloatValues(0f, 1f); @@ -517,6 +525,8 @@ public class PieRenderer extends OverlayRenderer @Override public void onDraw(Canvas canvas) { + mProgressRenderer.onDraw(canvas, mFocusX, mFocusY); + float alpha = 1; if (mXFade != null) { alpha = (Float) mXFade.getAnimatedValue(); @@ -911,17 +921,6 @@ public class PieRenderer extends OverlayRenderer setCircle(mFocusX, mFocusY); } - public void alignFocus(int x, int y) { - mOverlay.removeCallbacks(mDisappear); - mAnimation.cancel(); - mAnimation.reset(); - mFocusX = x; - mFocusY = y; - mDialAngle = DIAL_HORIZONTAL; - setCircle(x, y); - mFocused = false; - } - public int getSize() { return 2 * mCircleSize; } diff --git a/src/com/android/camera/ui/ProgressRenderer.java b/src/com/android/camera/ui/ProgressRenderer.java new file mode 100644 index 000000000..1783c70b5 --- /dev/null +++ b/src/com/android/camera/ui/ProgressRenderer.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.camera.ui; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; + +import com.android.camera2.R; + +/** + * Renders a circular progress bar on the screen. + */ +public class ProgressRenderer { + private final int mProgressRadius; + private final Paint mProgressBasePaint; + private final Paint mProgressPaint; + + private RectF mArcBounds = new RectF(0, 0, 1, 1); + private int mProgressAngleDegrees = 270; + private boolean mVisible = false; + + public ProgressRenderer(Context context) { + mProgressRadius = context.getResources().getDimensionPixelSize(R.dimen.pie_progress_radius); + int pieProgressWidth = context.getResources().getDimensionPixelSize( + R.dimen.pie_progress_width); + mProgressBasePaint = createProgressPaint(pieProgressWidth, 0.2f); + mProgressPaint = createProgressPaint(pieProgressWidth, 1.0f); + } + + private static Paint createProgressPaint(int width, float alpha) { + Paint paint = new Paint(); + paint.setAntiAlias(true); + // 20% alpha. + paint.setColor(Color.argb((int) (alpha * 255), 255, 255, 255)); + paint.setStrokeWidth(width); + paint.setStyle(Paint.Style.STROKE); + return paint; + } + + /** + * Shows a progress indicator. If the progress is '100', the progress + * indicator will be hidden. + * + * @param percent the progress in percent (0-100). + */ + public void setProgress(int percent) { + // Clamp the value. + percent = Math.min(100, Math.max(percent, 0)); + mProgressAngleDegrees = (int) ((360f / 100) * percent); + + // Hide when processing reached 100 percent. + mVisible = percent < 100; + } + + /** + * Draw the current progress (if < 100%) centered at the given location. + */ + public void onDraw(Canvas canvas, int centerX, int centerY) { + if (!mVisible) { + return; + } + mArcBounds = new RectF(centerX - mProgressRadius, centerY - mProgressRadius, centerX + + mProgressRadius, + centerY + mProgressRadius); + + canvas.drawCircle(centerX, centerY, mProgressRadius, mProgressBasePaint); + canvas.drawArc(mArcBounds, -90, mProgressAngleDegrees, false, mProgressPaint); + } +} |