diff options
author | nicolasroard <nicolasroard@google.com> | 2012-09-27 15:10:28 -0700 |
---|---|---|
committer | nicolasroard <nicolasroard@google.com> | 2012-09-27 15:45:40 -0700 |
commit | 90b3fa4aa65b332aebe5bcc0a87a74770adaecf1 (patch) | |
tree | 9918285e23507c953c1742384398a90648882b3e /src/com/android/gallery3d/filtershow/ui | |
parent | b10a2712931ba35d35f3f795beb585eca4ce6738 (diff) | |
download | android_packages_apps_Snap-90b3fa4aa65b332aebe5bcc0a87a74770adaecf1.tar.gz android_packages_apps_Snap-90b3fa4aa65b332aebe5bcc0a87a74770adaecf1.tar.bz2 android_packages_apps_Snap-90b3fa4aa65b332aebe5bcc0a87a74770adaecf1.zip |
Remove the pie slider, add a linear slider
bug:7247494
Change-Id: Id002b46d4a0ee0ff2a3ed9c4924defd0b1760b79
Diffstat (limited to 'src/com/android/gallery3d/filtershow/ui')
-rw-r--r-- | src/com/android/gallery3d/filtershow/ui/PieSlider.java | 181 | ||||
-rw-r--r-- | src/com/android/gallery3d/filtershow/ui/SliderController.java | 163 | ||||
-rw-r--r-- | src/com/android/gallery3d/filtershow/ui/SliderListener.java (renamed from src/com/android/gallery3d/filtershow/ui/PieSliderListener.java) | 2 |
3 files changed, 164 insertions, 182 deletions
diff --git a/src/com/android/gallery3d/filtershow/ui/PieSlider.java b/src/com/android/gallery3d/filtershow/ui/PieSlider.java deleted file mode 100644 index 0f3702d37..000000000 --- a/src/com/android/gallery3d/filtershow/ui/PieSlider.java +++ /dev/null @@ -1,181 +0,0 @@ - -package com.android.gallery3d.filtershow.ui; - -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.Rect; -import android.graphics.RectF; -import android.graphics.Path.FillType; -import android.view.MotionEvent; - -public class PieSlider { - private float mCenterX; - private float mCenterY; - private float mCurrentX; - private float mCurrentY; - private int mStartAngle = 210; - private int mEndAngle = 120; - private int mValue = 100; - - private Paint mPaint = new Paint(); - private Path mBasePath = new Path(); - private Path mCirclePath = new Path(); - private RectF mOvalRect = new RectF(); - private Rect mTextBounds = new Rect(); - - private PieSliderListener mListener = null; - - private MODES mMode = MODES.NONE; - private static int mMenuRadius = 140; - private static int mTextSize = 32; - private static int mFanDistance = 2 * mMenuRadius; - private static int mTextDistance = (int) (2.2f * mMenuRadius); - private static int mLineDistance = (int) (2.5f * mMenuRadius); - - private enum MODES { - NONE, DOWN, UP, MOVE - } - - public void onDraw(Canvas canvas) { - if (mMode == MODES.NONE || mMode == MODES.UP) { - return; - } - drawFan(canvas); - } - - public void setActionDown(float x, float y) { - mCenterX = x; - mCenterY = y; - mCurrentX = x; - mCurrentY = y; - mMode = MODES.DOWN; - } - - public void setActionMove(float x, float y) { - mCurrentX = x; - mCurrentY = y; - mMode = MODES.MOVE; - computeValue(); - if (mListener != null) { - mListener.onNewValue(mValue); - } - } - - public void setActionUp() { - mMode = MODES.UP; - } - - public void setNoAction() { - mMode = MODES.NONE; - } - - private void drawFan(Canvas canvas) { - mPaint.setARGB(200, 200, 200, 200); - mPaint.setStrokeWidth(4); - mBasePath.reset(); - mCirclePath.reset(); - - int mf = 2; - - mOvalRect.left = mCenterX - mFanDistance; - mOvalRect.top = mCenterY - mFanDistance; - mOvalRect.right = mOvalRect.left + mf * mFanDistance; - mOvalRect.bottom = mOvalRect.top + mf * mFanDistance; - - canvas.save(); - mBasePath.moveTo(mCenterX, mCenterY); - mBasePath.arcTo(mOvalRect, mStartAngle, mEndAngle); - - mCirclePath.moveTo(mCenterX, mCenterY); - mOvalRect.left = mCenterX - mMenuRadius; - mOvalRect.top = mCenterY - mMenuRadius; - mOvalRect.right = mOvalRect.left + mf * mMenuRadius; - mOvalRect.bottom = mOvalRect.top + mf * mMenuRadius; - mCirclePath.arcTo(mOvalRect, mStartAngle, mEndAngle); - - mBasePath.setFillType(FillType.EVEN_ODD); - mBasePath.addPath(mCirclePath); - mBasePath.close(); - - canvas.drawPath(mBasePath, mPaint); - canvas.restore(); - - canvas.save(); - canvas.rotate(-60, mCenterX, mCenterY); - canvas.drawLine(mCenterX, mCenterY - mMenuRadius, mCenterX, mCenterY - mLineDistance, - mPaint); - canvas.restore(); - canvas.save(); - canvas.rotate(mEndAngle - 60, mCenterX, mCenterY); - canvas.drawLine(mCenterX, mCenterY - mMenuRadius, mCenterX, mCenterY - mLineDistance, - mPaint); - canvas.restore(); - - canvas.save(); - canvas.rotate(mEndAngle / 2 - 60, mCenterX, mCenterY); - String txt = "" + mValue; - mPaint.setTextSize(mTextSize); - mPaint.getTextBounds(txt, 0, txt.length(), mTextBounds); - mPaint.setARGB(255, 20, 20, 20); - canvas.drawText(txt, mCenterX - mTextBounds.width() / 2 - 2, mCenterY - mTextDistance - 2, - mPaint); - mPaint.setARGB(200, 200, 200, 200); - canvas.drawText(txt, mCenterX - mTextBounds.width() / 2, mCenterY - mTextDistance, mPaint); - canvas.restore(); - } - - private void computeValue() { - float dX = mCurrentX - mCenterX; - float dY = mCurrentY - mCenterY; - float distance = (float) Math.sqrt(dX * dX + dY * dY); - - if (mCenterY > mCurrentY && distance > mMenuRadius) { - float angle = (float) (Math.atan2(dX, dY) * 180 / Math.PI); - if (angle < 0) { - // from -90 to -180 - angle = -angle; - angle = Math.max(90, angle); - angle = Math.min(180, angle); - angle -= 90; - } else { - angle = Math.max(90, angle); - angle = Math.min(180, angle); - angle -= 90; - angle = 90 + (90 - angle); - } - angle /= 180.0f; - angle = Math.max(0, angle); - angle = Math.min(1, angle); - mEndAngle = (int) (120 * angle); - mValue = (int) (100 * (mEndAngle / 120.0f)); - } - } - - public void setListener(PieSliderListener listener) { - mListener = listener; - } - - public boolean onTouchEvent(MotionEvent event) { - setNoAction(); - switch (event.getActionMasked()) { - case (MotionEvent.ACTION_DOWN): { - setActionDown(event.getX(), event.getY()); - break; - } - case (MotionEvent.ACTION_UP): { - setActionUp(); - break; - } - case (MotionEvent.ACTION_CANCEL): { - setActionUp(); - break; - } - case (MotionEvent.ACTION_MOVE): { - setActionMove(event.getX(), event.getY()); - break; - } - } - return true; - } -} diff --git a/src/com/android/gallery3d/filtershow/ui/SliderController.java b/src/com/android/gallery3d/filtershow/ui/SliderController.java new file mode 100644 index 000000000..86b5fb736 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/ui/SliderController.java @@ -0,0 +1,163 @@ + +package com.android.gallery3d.filtershow.ui; + +import android.graphics.Canvas; +import android.graphics.Paint; +import android.view.MotionEvent; + +import android.util.Log; + +public class SliderController { + private static final String LOGTAG = "SliderController"; + + private float mCenterX; + private float mCenterY; + private float mCurrentX; + private float mCurrentY; + private int mValue = 100; + int mOriginalValue = 0; + + private int mWidth = 0; + private int mHeight = 0; + + private String mToast = null; + + private Paint mPaint = new Paint(); + + private SliderListener mListener = null; + + private MODES mMode = MODES.NONE; + private static int mTextSize = 128; + + private enum MODES { + NONE, DOWN, UP, MOVE + } + + public void onDraw(Canvas canvas) { + if (mMode == MODES.NONE || mMode == MODES.UP) { + return; + } + drawToast(canvas); + } + + public void drawToast(Canvas canvas) { + if (mToast != null) { + canvas.save(); + mPaint.setTextSize(mTextSize); + float textWidth = mPaint.measureText(mToast); + int toastX = (int) ((getWidth() - textWidth) / 2.0f); + int toastY = (int) (getHeight() / 3.0f); + + mPaint.setARGB(255, 0, 0, 0); + canvas.drawText(mToast, toastX - 2, toastY - 2, mPaint); + canvas.drawText(mToast, toastX - 2, toastY, mPaint); + canvas.drawText(mToast, toastX, toastY - 2, mPaint); + canvas.drawText(mToast, toastX + 2, toastY + 2, mPaint); + canvas.drawText(mToast, toastX + 2, toastY, mPaint); + canvas.drawText(mToast, toastX, toastY + 2, mPaint); + mPaint.setARGB(255, 255, 255, 255); + canvas.drawText(mToast, toastX, toastY, mPaint); + canvas.restore(); + } + } + + protected int computeValue() { + int delta = (int) (100 * (getCurrentX() - getCenterX()) / (float) getWidth()); + int value = mOriginalValue + delta; + value = Math.max(0, Math.min(value, 100)); + setValue(value); + mToast = "" + value; + return value; + } + + public void setValue(int value) { + mValue = value; + } + + public int getWidth() { + return mWidth; + } + + public int getHeight() { + return mHeight; + } + + public void setWidth(int value) { + mWidth = value; + } + + public void setHeight(int value) { + mHeight = value; + } + + public float getCurrentX() { + return mCurrentX; + } + + public float getCurrentY() { + return mCurrentY; + } + + public float getCenterX() { + return mCenterX; + } + + public float getCenterY() { + return mCenterY; + } + + public void setActionDown(float x, float y) { + mCenterX = x; + mCenterY = y; + mCurrentX = x; + mCurrentY = y; + mMode = MODES.DOWN; + } + + public void setActionMove(float x, float y) { + mCurrentX = x; + mCurrentY = y; + mMode = MODES.MOVE; + computeValue(); + if (mListener != null) { + mListener.onNewValue(mValue); + } + } + + public void setActionUp() { + mMode = MODES.UP; + mOriginalValue = computeValue(); + } + + public void setNoAction() { + mMode = MODES.NONE; + } + + public void setListener(SliderListener listener) { + mListener = listener; + } + + public boolean onTouchEvent(MotionEvent event) { + setNoAction(); + switch (event.getActionMasked()) { + case (MotionEvent.ACTION_DOWN): { + setActionDown(event.getX(), event.getY()); + break; + } + case (MotionEvent.ACTION_UP): { + setActionUp(); + break; + } + case (MotionEvent.ACTION_CANCEL): { + setActionUp(); + break; + } + case (MotionEvent.ACTION_MOVE): { + setActionMove(event.getX(), event.getY()); + break; + } + } + return true; + } + +} diff --git a/src/com/android/gallery3d/filtershow/ui/PieSliderListener.java b/src/com/android/gallery3d/filtershow/ui/SliderListener.java index 6020ad8a9..67e28de0e 100644 --- a/src/com/android/gallery3d/filtershow/ui/PieSliderListener.java +++ b/src/com/android/gallery3d/filtershow/ui/SliderListener.java @@ -1,6 +1,6 @@ package com.android.gallery3d.filtershow.ui; -public interface PieSliderListener { +public interface SliderListener { public void onNewValue(int value); } |