summaryrefslogtreecommitdiff
path: root/core/java/android/widget/StackView.java
diff options
context:
space:
mode:
authorAdam Cohen <adamcohen@google.com>2010-11-11 15:23:41 -0800
committerAdam Cohen <adamcohen@google.com>2010-11-12 15:12:56 -0800
commit8baf5df0fa5b3453a7f17e95746c5d8cadc00163 (patch)
treebcd0494941b84da7eb347aa8770582fee1fefa7f /core/java/android/widget/StackView.java
parent176116aa60d57bce10fa1eaa491c3cc654c5c4c2 (diff)
Adding click feedback to StackView
Change-Id: If163d144c96607c53299877e5d99747530c281fe
Diffstat (limited to 'core/java/android/widget/StackView.java')
-rw-r--r--core/java/android/widget/StackView.java55
1 files changed, 52 insertions, 3 deletions
diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java
index 7c38714aee63..432dd4a841df 100644
--- a/core/java/android/widget/StackView.java
+++ b/core/java/android/widget/StackView.java
@@ -118,6 +118,8 @@ public class StackView extends AdapterViewAnimator {
private static HolographicHelper sHolographicHelper;
private ImageView mHighlight;
+ private ImageView mClickFeedback;
+ private boolean mClickFeedbackIsValid = false;
private StackSlider mStackSlider;
private boolean mFirstLayoutHappened = false;
private int mStackMode;
@@ -145,6 +147,12 @@ public class StackView extends AdapterViewAnimator {
mHighlight = new ImageView(getContext());
mHighlight.setLayoutParams(new LayoutParams(mHighlight));
addViewInLayout(mHighlight, -1, new LayoutParams(mHighlight));
+
+ mClickFeedback = new ImageView(getContext());
+ mClickFeedback.setLayoutParams(new LayoutParams(mClickFeedback));
+ addViewInLayout(mClickFeedback, -1, new LayoutParams(mClickFeedback));
+ mClickFeedback.setVisibility(INVISIBLE);
+
mStackSlider = new StackSlider();
if (sHolographicHelper == null) {
@@ -310,6 +318,34 @@ public class StackView extends AdapterViewAnimator {
}
}
mTransitionIsSetup = false;
+ mClickFeedbackIsValid = false;
+ }
+
+ void updateClickFeedback() {
+ if (!mClickFeedbackIsValid) {
+ View v = getViewAtRelativeIndex(0);
+ if (v != null) {
+ mClickFeedback.setImageBitmap(sHolographicHelper.createOutline(v,
+ HolographicHelper.CLICK_FEEDBACK));
+ mClickFeedback.setTranslationX(v.getTranslationX());
+ mClickFeedback.setTranslationY(v.getTranslationY());
+ }
+ mClickFeedbackIsValid = true;
+ }
+ }
+
+ @Override
+ void showTapFeedback(View v) {
+ updateClickFeedback();
+ mClickFeedback.setVisibility(VISIBLE);
+ mClickFeedback.bringToFront();
+ invalidate();
+ }
+
+ @Override
+ void hideTapFeedback(View v) {
+ mClickFeedback.setVisibility(INVISIBLE);
+ invalidate();
}
private void updateChildTransforms() {
@@ -1010,23 +1046,36 @@ public class StackView extends AdapterViewAnimator {
private final Paint mHolographicPaint = new Paint();
private final Paint mErasePaint = new Paint();
private final Paint mBlurPaint = new Paint();
+ private static final int RES_OUT = 0;
+ private static final int CLICK_FEEDBACK = 1;
+ private float mDensity;
HolographicHelper(Context context) {
initializePaints(context);
}
void initializePaints(Context context) {
- final float density = context.getResources().getDisplayMetrics().density;
+ mDensity = context.getResources().getDisplayMetrics().density;
- mHolographicPaint.setColor(0xff6699ff);
mHolographicPaint.setFilterBitmap(true);
mHolographicPaint.setMaskFilter(TableMaskFilter.CreateClipTable(0, 30));
mErasePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
mErasePaint.setFilterBitmap(true);
- mBlurPaint.setMaskFilter(new BlurMaskFilter(2*density, BlurMaskFilter.Blur.NORMAL));
}
Bitmap createOutline(View v) {
+ return createOutline(v, RES_OUT);
+ }
+
+ Bitmap createOutline(View v, int type) {
+ if (type == RES_OUT) {
+ mHolographicPaint.setColor(0xff6699ff);
+ mBlurPaint.setMaskFilter(new BlurMaskFilter(2*mDensity, BlurMaskFilter.Blur.NORMAL));
+ } else if (type == CLICK_FEEDBACK) {
+ mHolographicPaint.setColor(0x886699ff);
+ mBlurPaint.setMaskFilter(new BlurMaskFilter(4*mDensity, BlurMaskFilter.Blur.NORMAL));
+ }
+
if (v.getMeasuredWidth() == 0 || v.getMeasuredHeight() == 0) {
return null;
}