SliderController.java revision 02f778af1f8a2250d91da450f82c30572de96062
1 2package com.android.gallery3d.filtershow.ui; 3 4import android.graphics.Canvas; 5import android.graphics.Paint; 6import android.view.MotionEvent; 7 8import android.util.Log; 9 10public class SliderController { 11 private static final String LOGTAG = "SliderController"; 12 13 private float mCenterX; 14 private float mCenterY; 15 private float mCurrentX; 16 private float mCurrentY; 17 private int mValue = 100; 18 int mOriginalValue = 0; 19 20 private int mWidth = 0; 21 private int mHeight = 0; 22 23 private String mToast = null; 24 25 private Paint mPaint = new Paint(); 26 27 private SliderListener mListener = null; 28 29 private MODES mMode = MODES.NONE; 30 private static int mTextSize = 128; 31 32 private enum MODES { 33 NONE, DOWN, UP, MOVE 34 } 35 36 public void onDraw(Canvas canvas) { 37 if (mMode == MODES.NONE || mMode == MODES.UP) { 38 return; 39 } 40 drawToast(canvas); 41 } 42 43 public void drawToast(Canvas canvas) { 44 if (mToast != null) { 45 canvas.save(); 46 mPaint.setTextSize(mTextSize); 47 float textWidth = mPaint.measureText(mToast); 48 int toastX = (int) ((getWidth() - textWidth) / 2.0f); 49 int toastY = (int) (getHeight() / 3.0f); 50 51 mPaint.setARGB(255, 0, 0, 0); 52 canvas.drawText(mToast, toastX - 2, toastY - 2, mPaint); 53 canvas.drawText(mToast, toastX - 2, toastY, mPaint); 54 canvas.drawText(mToast, toastX, toastY - 2, mPaint); 55 canvas.drawText(mToast, toastX + 2, toastY + 2, mPaint); 56 canvas.drawText(mToast, toastX + 2, toastY, mPaint); 57 canvas.drawText(mToast, toastX, toastY + 2, mPaint); 58 mPaint.setARGB(255, 255, 255, 255); 59 canvas.drawText(mToast, toastX, toastY, mPaint); 60 canvas.restore(); 61 } 62 } 63 64 protected int computeValue() { 65 int delta = (int) (100 * (getCurrentX() - getCenterX()) / (float) getWidth()); 66 int value = mOriginalValue + delta; 67 value = Math.max(0, Math.min(value, 100)); 68 setValue(value); 69 mToast = "" + value; 70 return value; 71 } 72 73 public void setValue(int value) { 74 mValue = value; 75 } 76 77 public int getWidth() { 78 return mWidth; 79 } 80 81 public int getHeight() { 82 return mHeight; 83 } 84 85 public void setWidth(int value) { 86 mWidth = value; 87 } 88 89 public void setHeight(int value) { 90 mHeight = value; 91 } 92 93 public float getCurrentX() { 94 return mCurrentX; 95 } 96 97 public float getCurrentY() { 98 return mCurrentY; 99 } 100 101 public float getCenterX() { 102 return mCenterX; 103 } 104 105 public float getCenterY() { 106 return mCenterY; 107 } 108 109 public void setActionDown(float x, float y) { 110 mCenterX = x; 111 mCenterY = y; 112 mCurrentX = x; 113 mCurrentY = y; 114 mMode = MODES.DOWN; 115 } 116 117 public void setActionMove(float x, float y) { 118 mCurrentX = x; 119 mCurrentY = y; 120 mMode = MODES.MOVE; 121 computeValue(); 122 if (mListener != null) { 123 mListener.onNewValue(mValue); 124 } 125 } 126 127 public void setActionUp() { 128 mMode = MODES.UP; 129 mOriginalValue = computeValue(); 130 } 131 132 public void setNoAction() { 133 mMode = MODES.NONE; 134 } 135 136 public void setListener(SliderListener listener) { 137 mListener = listener; 138 } 139 140 public boolean onTouchEvent(MotionEvent event) { 141 setNoAction(); 142 switch (event.getActionMasked()) { 143 case (MotionEvent.ACTION_DOWN): { 144 setActionDown(event.getX(), event.getY()); 145 break; 146 } 147 case (MotionEvent.ACTION_UP): { 148 setActionUp(); 149 break; 150 } 151 case (MotionEvent.ACTION_CANCEL): { 152 setActionUp(); 153 break; 154 } 155 case (MotionEvent.ACTION_MOVE): { 156 setActionMove(event.getX(), event.getY()); 157 break; 158 } 159 } 160 return true; 161 } 162 163} 164