diff options
| author | Android (Google) Code Review <android-gerrit@google.com> | 2009-11-12 13:13:58 -0800 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2009-11-12 13:13:58 -0800 |
| commit | 2477fd69492055f3c6ee62ed9993e9fde8283144 (patch) | |
| tree | 29e125b438728753800d6c2c6a220b38c68f59c2 /core/java/com | |
| parent | 58c603eff0d0b13fe581119e1d9c228da99d77e7 (diff) | |
| parent | 4df2c5433bb530fae6191a0298a6d494ca03eaa7 (diff) | |
| download | frameworks_base-2477fd69492055f3c6ee62ed9993e9fde8283144.zip frameworks_base-2477fd69492055f3c6ee62ed9993e9fde8283144.tar.gz frameworks_base-2477fd69492055f3c6ee62ed9993e9fde8283144.tar.bz2 | |
Merge change Ic31c11ad into eclair
* changes:
Fix 2209086: restore drawable states when drawables change.
Diffstat (limited to 'core/java/com')
| -rw-r--r-- | core/java/com/android/internal/widget/SlidingTab.java | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/core/java/com/android/internal/widget/SlidingTab.java b/core/java/com/android/internal/widget/SlidingTab.java index dfd4f40..4a411d7 100644 --- a/core/java/com/android/internal/widget/SlidingTab.java +++ b/core/java/com/android/internal/widget/SlidingTab.java @@ -37,8 +37,11 @@ import com.android.internal.R; /** * A special widget containing two Sliders and a threshold for each. Moving either slider beyond - * the threshold will cause the registered OnTriggerListener.onTrigger() to be called with - * {@link OnTriggerListener#LEFT_HANDLE} or {@link OnTriggerListener#RIGHT_HANDLE} to be called. + * the threshold will cause the registered OnTriggerListener.onTrigger() to be called with + * whichHandle being {@link OnTriggerListener#LEFT_HANDLE} or {@link OnTriggerListener#RIGHT_HANDLE} + * Equivalently, selecting a tab will result in a call to + * {@link OnTriggerListener#onGrabbedStateChange(View, int)} with one of these two states. Releasing + * the tab will result in whichHandle being {@link OnTriggerListener#NO_HANDLE}. * */ public class SlidingTab extends ViewGroup { @@ -50,7 +53,7 @@ public class SlidingTab extends ViewGroup { private static final int MSG_ANIMATE = 100; // TODO: Make these configurable - private static final float TARGET_ZONE = 2.0f / 3.0f; + private static final float THRESHOLD = 2.0f / 3.0f; private static final long VIBRATE_SHORT = 30; private static final long VIBRATE_LONG = 40; @@ -71,35 +74,35 @@ public class SlidingTab extends ViewGroup { private Slider mRightSlider; private Slider mCurrentSlider; private boolean mTracking; - private float mTargetZone; + private float mThreshold; private Slider mOtherSlider; private boolean mAnimating; /** * Interface definition for a callback to be invoked when a tab is triggered - * by moving it beyond a target zone. + * by moving it beyond a threshold. */ public interface OnTriggerListener { /** * The interface was triggered because the user let go of the handle without reaching the - * target zone. + * threshold. */ public static final int NO_HANDLE = 0; /** * The interface was triggered because the user grabbed the left handle and moved it past - * the target zone. + * the threshold. */ public static final int LEFT_HANDLE = 1; /** * The interface was triggered because the user grabbed the right handle and moved it past - * the target zone. + * the threshold. */ public static final int RIGHT_HANDLE = 2; /** - * Called when the user moves a handle beyond the target zone. + * Called when the user moves a handle beyond the threshold. * * @param v The view that was triggered. * @param whichHandle Which "dial handle" the user grabbed, @@ -146,6 +149,7 @@ public class SlidingTab extends ViewGroup { private final ImageView tab; private final TextView text; private final ImageView target; + private int currentState = STATE_NORMAL; /** * Constructor @@ -223,6 +227,7 @@ public class SlidingTab extends ViewGroup { } else { text.setTextAppearance(text.getContext(), R.style.TextAppearance_SlidingTabNormal); } + currentState = state; } void showTarget() { @@ -260,8 +265,8 @@ public class SlidingTab extends ViewGroup { final int parentWidth = r - l; final int parentHeight = b - t; - final int leftTarget = (int) (TARGET_ZONE * parentWidth) - targetWidth + handleWidth / 2; - final int rightTarget = (int) ((1.0f - TARGET_ZONE) * parentWidth) - handleWidth / 2; + final int leftTarget = (int) (THRESHOLD * parentWidth) - targetWidth + handleWidth / 2; + final int rightTarget = (int) ((1.0f - THRESHOLD) * parentWidth) - handleWidth / 2; final int left = (parentWidth - handleWidth) / 2; final int right = left + handleWidth; @@ -286,8 +291,8 @@ public class SlidingTab extends ViewGroup { // vertical final int targetLeft = (parentWidth - targetWidth) / 2; final int targetRight = (parentWidth + targetWidth) / 2; - final int top = (int) (TARGET_ZONE * parentHeight) + handleHeight / 2 - targetHeight; - final int bottom = (int) ((1.0f - TARGET_ZONE) * parentHeight) - handleHeight / 2; + final int top = (int) (THRESHOLD * parentHeight) + handleHeight / 2 - targetHeight; + final int bottom = (int) ((1.0f - THRESHOLD) * parentHeight) - handleHeight / 2; if (alignment == ALIGN_TOP) { tab.layout(left, 0, right, handleHeight); text.layout(left, 0 - parentHeight, right, 0); @@ -300,6 +305,10 @@ public class SlidingTab extends ViewGroup { } } + public void updateDrawableStates() { + setState(currentState); + } + public int getTabWidth() { return tab.getDrawable().getIntrinsicWidth(); } @@ -400,12 +409,12 @@ public class SlidingTab extends ViewGroup { if (leftHit) { mCurrentSlider = mLeftSlider; mOtherSlider = mRightSlider; - mTargetZone = isHorizontal() ? TARGET_ZONE : 1.0f - TARGET_ZONE; + mThreshold = isHorizontal() ? THRESHOLD : 1.0f - THRESHOLD; setGrabbedState(OnTriggerListener.LEFT_HANDLE); } else { mCurrentSlider = mRightSlider; mOtherSlider = mLeftSlider; - mTargetZone = isHorizontal() ? 1.0f - TARGET_ZONE : TARGET_ZONE; + mThreshold = isHorizontal() ? 1.0f - THRESHOLD : THRESHOLD; setGrabbedState(OnTriggerListener.RIGHT_HANDLE); } mCurrentSlider.setState(Slider.STATE_PRESSED); @@ -429,16 +438,16 @@ public class SlidingTab extends ViewGroup { case MotionEvent.ACTION_MOVE: moveHandle(x, y); float position = isHorizontal() ? x : y; - float target = mTargetZone * (isHorizontal() ? getWidth() : getHeight()); - boolean targetZoneReached; + float target = mThreshold * (isHorizontal() ? getWidth() : getHeight()); + boolean thresholdReached; if (isHorizontal()) { - targetZoneReached = mCurrentSlider == mLeftSlider ? + thresholdReached = mCurrentSlider == mLeftSlider ? position > target : position < target; } else { - targetZoneReached = mCurrentSlider == mLeftSlider ? + thresholdReached = mCurrentSlider == mLeftSlider ? position < target : position > target; } - if (!mTriggered && targetZoneReached) { + if (!mTriggered && thresholdReached) { mTriggered = true; mTracking = false; mCurrentSlider.setState(Slider.STATE_ACTIVE); @@ -527,6 +536,7 @@ public class SlidingTab extends ViewGroup { mLeftSlider.setTarget(targetId); mLeftSlider.setBarBackgroundResource(barId); mLeftSlider.setTabBackgroundResource(tabId); + mLeftSlider.updateDrawableStates(); } /** @@ -554,6 +564,7 @@ public class SlidingTab extends ViewGroup { mRightSlider.setTarget(targetId); mRightSlider.setBarBackgroundResource(barId); mRightSlider.setTabBackgroundResource(tabId); + mRightSlider.updateDrawableStates(); } /** |
