mTouchFeedbackView.animate().cancel();
} else {
if (mTouchFeedbackView.setBitmap(background)) {
- mTouchFeedbackView.alignWithIconView(icon, mShortcutsAndWidgets);
+ mTouchFeedbackView.alignWithIconView(icon, mShortcutsAndWidgets,
+ null /* clipAgainstView */);
mTouchFeedbackView.animateShadow();
}
}
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
+import android.graphics.Rect;
import android.view.View;
import android.view.ViewDebug;
import android.view.ViewGroup;
* Aligns the shadow with {@param view}
* @param viewParent immediate parent of {@param view}. It must be a sibling of this view.
*/
- public void alignWithIconView(BubbleTextView view, ViewGroup viewParent) {
+ public void alignWithIconView(BubbleTextView view, ViewGroup viewParent, View clipAgainstView) {
float leftShift = view.getLeft() + viewParent.getLeft() - getLeft();
float topShift = view.getTop() + viewParent.getTop() - getTop();
int iconWidth = view.getRight() - view.getLeft();
+ int iconHeight = view.getBottom() - view.getTop();
int iconHSpace = iconWidth - view.getCompoundPaddingRight() - view.getCompoundPaddingLeft();
float drawableWidth = view.getIcon().getBounds().width();
+ if (clipAgainstView != null) {
+ // Set the bounds to clip against
+ int[] coords = new int[] {0, 0};
+ Utilities.getDescendantCoordRelativeToAncestor(clipAgainstView, (View) getParent(),
+ coords, false);
+ int clipLeft = (int) Math.max(0, coords[0] - leftShift - mShadowPadding);
+ int clipTop = (int) Math.max(0, coords[1] - topShift - mShadowPadding) ;
+ setClipBounds(new Rect(clipLeft, clipTop, clipLeft + iconWidth, clipTop + iconHeight));
+ } else {
+ // Reset the clip bounds
+ setClipBounds(null);
+ }
+
setTranslationX(leftShift
+ viewParent.getTranslationX()
+ view.getCompoundPaddingLeft() * view.getScaleX()
&& "NMR1".compareTo(VERSION.CODENAME) <= 0;
}
- // TODO: use Build.VERSION_CODES when available
- public static final boolean ATLEAST_MARSHMALLOW = Build.VERSION.SDK_INT >= 23;
+ public static final boolean ATLEAST_MARSHMALLOW =
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
public static final boolean ATLEAST_LOLLIPOP_MR1 =
Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.AttributeSet;
+import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.android.launcher3.ClickShadowView;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
+import com.android.launcher3.R;
/**
* A container for RecyclerView to allow for the click shadow view to be shown behind an icon that
mTouchFeedbackView.setBitmap(null);
mTouchFeedbackView.animate().cancel();
} else if (mTouchFeedbackView.setBitmap(background)) {
- mTouchFeedbackView.alignWithIconView(icon, (ViewGroup) icon.getParent());
+ View rv = findViewById(R.id.apps_list_view);
+ mTouchFeedbackView.alignWithIconView(icon, (ViewGroup) icon.getParent(), rv);
mTouchFeedbackView.animateShadow();
}
}