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 | |
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')
-rw-r--r-- | src/com/android/gallery3d/filtershow/imageshow/ImageShow.java | 27 | ||||
-rw-r--r-- | src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java | 2 | ||||
-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 |
5 files changed, 183 insertions, 192 deletions
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java index c22339dce..48e5c471b 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java +++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java @@ -5,8 +5,8 @@ import com.android.gallery3d.filtershow.FilterShowActivity; import com.android.gallery3d.filtershow.HistoryAdapter; import com.android.gallery3d.filtershow.cache.ImageLoader; import com.android.gallery3d.filtershow.presets.ImagePreset; -import com.android.gallery3d.filtershow.ui.PieSlider; -import com.android.gallery3d.filtershow.ui.PieSliderListener; +import com.android.gallery3d.filtershow.ui.SliderListener; +import com.android.gallery3d.filtershow.ui.SliderController; import com.android.gallery3d.R; import com.android.gallery3d.R.id; import com.android.gallery3d.R.layout; @@ -23,9 +23,10 @@ import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; +import android.view.View.MeasureSpec; import android.widget.ArrayAdapter; -public class ImageShow extends View implements PieSliderListener { +public class ImageShow extends View implements SliderListener { private static final String LOGTAG = "ImageShow"; @@ -40,7 +41,7 @@ public class ImageShow extends View implements PieSliderListener { protected Bitmap mForegroundImage = null; protected Bitmap mFilteredImage = null; - protected PieSlider mPieSlider = new PieSlider(); + protected SliderController mSliderController = new SliderController(); private HistoryAdapter mAdapter = null; @@ -64,18 +65,26 @@ public class ImageShow extends View implements PieSliderListener { public ImageShow(Context context, AttributeSet attrs) { super(context, attrs); - mPieSlider.setListener(this); + mSliderController.setListener(this); mAdapter = new HistoryAdapter(context, R.layout.filtershow_history_operation_row, R.id.rowTextView); } public ImageShow(Context context) { super(context); - mPieSlider.setListener(this); + mSliderController.setListener(this); mAdapter = new HistoryAdapter(context, R.layout.filtershow_history_operation_row, R.id.rowTextView); } + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int parentWidth = MeasureSpec.getSize(widthMeasureSpec); + int parentHeight = MeasureSpec.getSize(heightMeasureSpec); + setMeasuredDimension(parentWidth, parentHeight); + mSliderController.setWidth(parentWidth); + mSliderController.setHeight(parentHeight); + } + public void setAdapter(HistoryAdapter adapter) { mAdapter = adapter; } @@ -116,7 +125,7 @@ public class ImageShow extends View implements PieSliderListener { paint.setTextSize(128); float textWidth = paint.measureText(mToast); int toastX = (int) ((getWidth() - textWidth) / 2.0f); - int toastY = (int) (getHeight() / 2.0f); + int toastY = (int) (getHeight() / 3.0f); paint.setARGB(255, 0, 0, 0); canvas.drawText(mToast, toastX - 2, toastY - 2, paint); @@ -201,7 +210,7 @@ public class ImageShow extends View implements PieSliderListener { canvas.drawLine(0, 0, getWidth(), 0, mPaint); if (showControls()) { - mPieSlider.onDraw(canvas); + mSliderController.onDraw(canvas); } drawToast(canvas); @@ -274,7 +283,7 @@ public class ImageShow extends View implements PieSliderListener { public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); - mPieSlider.onTouchEvent(event); + mSliderController.onTouchEvent(event); // Log.v(LOGTAG, "invalidate from onTouchEvent"); invalidate(); return true; diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java b/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java index ed8b17811..78e40051d 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java +++ b/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java @@ -41,7 +41,7 @@ public class ImageSmallFilter extends ImageShow implements View.OnClickListener protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int parentWidth = MeasureSpec.getSize(widthMeasureSpec); int parentHeight = MeasureSpec.getSize(heightMeasureSpec); - setMeasuredDimension((int) (parentHeight * 1.5), parentHeight); + setMeasuredDimension(parentHeight, parentHeight); } /* 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); } |