diff options
Diffstat (limited to 'src')
4 files changed, 176 insertions, 4 deletions
diff --git a/src/com/android/launcher2/BubbleTextView.java b/src/com/android/launcher2/BubbleTextView.java index 51fdc2eb6..49c47cef7 100644 --- a/src/com/android/launcher2/BubbleTextView.java +++ b/src/com/android/launcher2/BubbleTextView.java @@ -90,10 +90,8 @@ public class BubbleTextView extends TextView { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(bubbleColor); mBubbleColorAlpha = Color.alpha(bubbleColor) / 255.0f; - mFocusedOutlineColor = res.getColor(android.R.color.holo_blue_light); - mFocusedGlowColor = res.getColor(android.R.color.holo_blue_light); - mPressedOutlineColor = res.getColor(android.R.color.holo_blue_light); - mPressedGlowColor = res.getColor(android.R.color.holo_blue_light); + mFocusedOutlineColor = mFocusedGlowColor = mPressedOutlineColor = mPressedGlowColor = + res.getColor(android.R.color.holo_blue_light); setShadowLayer(SHADOW_LARGE_RADIUS, 0.0f, SHADOW_Y_OFFSET, SHADOW_LARGE_COLOUR); } diff --git a/src/com/android/launcher2/HolographicImageView.java b/src/com/android/launcher2/HolographicImageView.java new file mode 100644 index 000000000..1d34cd6ba --- /dev/null +++ b/src/com/android/launcher2/HolographicImageView.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher2; + +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; +import android.widget.ImageView; + +public class HolographicImageView extends ImageView { + + private final HolographicViewHelper mHolographicHelper; + + public HolographicImageView(Context context) { + this(context, null); + } + + public HolographicImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public HolographicImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + mHolographicHelper = new HolographicViewHelper(context); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + // One time call to generate the pressed/focused state -- must be called after + // measure/layout + mHolographicHelper.generatePressedFocusedStates(this); + } +} diff --git a/src/com/android/launcher2/HolographicLinearLayout.java b/src/com/android/launcher2/HolographicLinearLayout.java new file mode 100644 index 000000000..986a063e5 --- /dev/null +++ b/src/com/android/launcher2/HolographicLinearLayout.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher2; + +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; +import android.widget.LinearLayout; + +public class HolographicLinearLayout extends LinearLayout { + + private final HolographicViewHelper mHolographicHelper; + + public HolographicLinearLayout(Context context) { + this(context, null); + } + + public HolographicLinearLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public HolographicLinearLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + setWillNotDraw(false); + mHolographicHelper = new HolographicViewHelper(context); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + // One time call to generate the pressed/focused state -- must be called after + // measure/layout + mHolographicHelper.generatePressedFocusedStates(this); + } +} diff --git a/src/com/android/launcher2/HolographicViewHelper.java b/src/com/android/launcher2/HolographicViewHelper.java new file mode 100644 index 000000000..c68a5eaad --- /dev/null +++ b/src/com/android/launcher2/HolographicViewHelper.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher2; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.drawable.StateListDrawable; +import android.view.View; + +public class HolographicViewHelper { + + private final HolographicOutlineHelper mOutlineHelper = new HolographicOutlineHelper(); + private final Canvas mTempCanvas = new Canvas(); + + private boolean mStatesUpdated; + private int mHighlightColor; + + public HolographicViewHelper(Context context) { + Resources res = context.getResources(); + mHighlightColor = res.getColor(android.R.color.holo_blue_light); + } + + /** + * Generate the pressed/focused states if necessary. + */ + void generatePressedFocusedStates(View v) { + if (!mStatesUpdated) { + mStatesUpdated = true; + Bitmap outline = createGlowingOutline(v, mTempCanvas, mHighlightColor, mHighlightColor); + FastBitmapDrawable d = new FastBitmapDrawable(outline); + + StateListDrawable states = new StateListDrawable(); + states.addState(new int[] {android.R.attr.state_pressed}, d); + states.addState(new int[] {android.R.attr.state_focused}, d); + v.setBackgroundDrawable(states); + } + } + + /** + * Returns a new bitmap to be used as the object outline, e.g. to visualize the drop location. + * Responsibility for the bitmap is transferred to the caller. + */ + private Bitmap createGlowingOutline(View v, Canvas canvas, int outlineColor, int glowColor) { + final int padding = HolographicOutlineHelper.MAX_OUTER_BLUR_RADIUS; + final Bitmap b = Bitmap.createBitmap( + v.getWidth() + padding, v.getHeight() + padding, Bitmap.Config.ARGB_8888); + + canvas.setBitmap(b); + canvas.save(); + v.draw(canvas); + canvas.restore(); + mOutlineHelper.applyOuterBlur(b, canvas, outlineColor); + canvas.setBitmap(null); + + return b; + } +} |