下面列出了android.view.View#setClipToOutline ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void initialize(YcCardViewDelegate cardView, Context context, int backgroundColor,
float radius, float elevation, float maxElevation, int startShadowColor, int endShadowColor) {
Log.e("AAA","CardViewApi21");
final YcRoundRectDrawable background = new YcRoundRectDrawable(backgroundColor, radius);
cardView.setCardBackground(background);
View view = cardView.getCardView();
view.setClipToOutline(true);
view.setElevation(elevation);
setMaxElevation(cardView, maxElevation);
}
@Override
public void initialize(CardViewDelegate cardView, Context context, int backgroundColor,
float radius, float elevation, float maxElevation) {
final RoundRectDrawable backgroundDrawable = new RoundRectDrawable(backgroundColor, radius);
cardView.setBackgroundDrawable(backgroundDrawable);
View view = (View) cardView;
view.setClipToOutline(true);
view.setElevation(elevation);
setMaxElevation(cardView, maxElevation);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void addView(View child, int index, ViewGroup.LayoutParams params) {
super.addView(child, index, params);
int i;
if (index == -1) {
i = getChildCount() - 1;
} else {
i = index;
}
child.setVisibility(i == visibleChild ? VISIBLE : INVISIBLE);
child.setClipToOutline(false);
}
@Override
public void initialize(ToggleGroupDelegate groupView, Context context,
ColorStateList backgroundColor, float radius, float elevation, float maxElevation) {
final RoundRectDrawable background = new RoundRectDrawable(backgroundColor, radius);
groupView.setGroupBackground(background);
View view = groupView.getToggleGroup();
view.setClipToOutline(true);
view.setElevation(elevation);
setMaxElevation(groupView, maxElevation);
}
@Override
public void initialize(CardViewDelegate cardView, Context context, int backgroundColor,
float radius, float elevation, float maxElevation, int cornerFlag, int edgesFlag) {
final OptRoundRectDrawable backgroundDrawable = new OptRoundRectDrawable(backgroundColor, radius, cornerFlag);
cardView.setBackgroundDrawable(backgroundDrawable);
View view = (View) cardView;
view.setClipToOutline(true);
view.setElevation(elevation);
setMaxElevation(cardView, maxElevation);
}
@Override
public void initialize(ToggleGroupDelegate groupView, Context context,
ColorStateList backgroundColor, float radius, float elevation, float maxElevation) {
final RoundRectDrawable background = new RoundRectDrawable(backgroundColor, radius);
groupView.setGroupBackground(background);
View view = groupView.getToggleGroup();
view.setClipToOutline(true);
view.setElevation(elevation);
setMaxElevation(groupView, maxElevation);
}
private View initializeConvertView(ViewGroup parent) {
View convertView;
final View view = mLayoutInflater.inflate(R.layout.pinger_item_view, parent, false);
convertView = view;
convertView.setTag(R.id.name, view.findViewById(R.id.name));
final View tmpProfilePicture = view.findViewById(R.id.profile_picture);
// OutlineProviders are available from API 21 onwards.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
tmpProfilePicture.setClipToOutline(true);
tmpProfilePicture.setOutlineProvider(new PingerOutlineProvider());
}
convertView.setTag(R.id.profile_picture, tmpProfilePicture);
return convertView;
}
public static void setRoundedRectBackground(View view, int color) {
if (color == Color.TRANSPARENT) {
view.setOutlineProvider(sOutlineProvider);
} else {
view.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
view.setBackgroundResource(R.drawable.lb_rounded_rect_bg);
((GradientDrawable) view.getBackground().mutate()).setColor(color);
}
view.setClipToOutline(true);
}
@Override
public void setRadiusAndShadow(int radius, @ILayout.HideRadiusSide int hideRadiusSide, int shadowElevation, float shadowAlpha) {
View owner = mOwner.get();
if (owner == null) {
return;
}
mRadius = radius;
mHideRadiusSide = hideRadiusSide;
if (mRadius > 0) {
if (hideRadiusSide == HIDE_RADIUS_SIDE_TOP) {
mRadiusArray = new float[]{0, 0, 0, 0, mRadius, mRadius, mRadius, mRadius};
} else if (hideRadiusSide == HIDE_RADIUS_SIDE_RIGHT) {
mRadiusArray = new float[]{mRadius, mRadius, 0, 0, 0, 0, mRadius, mRadius};
} else if (hideRadiusSide == HIDE_RADIUS_SIDE_BOTTOM) {
mRadiusArray = new float[]{mRadius, mRadius, mRadius, mRadius, 0, 0, 0, 0};
} else if (hideRadiusSide == HIDE_RADIUS_SIDE_LEFT) {
mRadiusArray = new float[]{0, 0, mRadius, mRadius, mRadius, mRadius, 0, 0};
} else {
mRadiusArray = null;
}
}
mShadowElevation = shadowElevation;
mShadowAlpha = shadowAlpha;
if (useFeature()) {
if (mShadowElevation == 0 || isRadiusWithSideHidden()) {
owner.setElevation(0);
} else {
owner.setElevation(mShadowElevation);
}
owner.setOutlineProvider(new ViewOutlineProvider() {
@Override
@TargetApi(21)
public void getOutline(View view, Outline outline) {
int w = view.getWidth(), h = view.getHeight();
if (w == 0 || h == 0) {
return;
}
if (isRadiusWithSideHidden()) {
int left = 0, top = 0, right = w, bottom = h;
if (mHideRadiusSide == HIDE_RADIUS_SIDE_LEFT) {
left -= mRadius;
} else if (mHideRadiusSide == HIDE_RADIUS_SIDE_TOP) {
top -= mRadius;
} else if (mHideRadiusSide == HIDE_RADIUS_SIDE_RIGHT) {
right += mRadius;
} else if (mHideRadiusSide == HIDE_RADIUS_SIDE_BOTTOM) {
bottom += mRadius;
}
outline.setRoundRect(left, top,
right, bottom, mRadius);
return;
}
int top = mOutlineInsetTop, bottom = Math.max(top + 1, h - mOutlineInsetBottom),
left = mOutlineInsetLeft, right = w - mOutlineInsetRight;
if (mIsOutlineExcludePadding) {
left += view.getPaddingLeft();
top += view.getPaddingTop();
right = Math.max(left + 1, right - view.getPaddingRight());
bottom = Math.max(top + 1, bottom - view.getPaddingBottom());
}
outline.setAlpha(mShadowAlpha);
if (mRadius <= 0) {
outline.setRect(left, top,
right, bottom);
} else {
outline.setRoundRect(left, top,
right, bottom, mRadius);
}
}
});
owner.setClipToOutline(mRadius > 0);
}
owner.invalidate();
}
private static void setClipToOutline(View view, boolean clipToOutline) {
if (clipToOutline && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
view.setClipToOutline(clipToOutline);
}
}
private static void unsetClipToOutline(View view, boolean clipToOutline) {
if (clipToOutline && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
view.setClipToOutline(false);
}
}
@Override
public void setClipToOutline(View view, boolean clipToOutline) {
view.setClipToOutline(clipToOutline);
}
public static void clearBackground(View view) {
view.setBackground(null);
view.setOutlineProvider(ViewOutlineProvider.BACKGROUND);
view.setClipToOutline(false);
}