Viewbadger In the Android message prompt class. The effect is as follows:
The Code is as follows:
BadgeView. java
Import android. content. context; import android. content. res. resources; import android. graphics. color; import android. graphics. typeface; import android. graphics. drawable. shapeDrawable; import android. graphics. drawable. shapes. roundRectShape; import android. util. attributeSet; import android. util. typedValue; import android. view. gravity; import android. view. view; import android. view. viewGroup; import android. view. V IewGroup. layoutParams; import android. view. viewParent; import android. view. animation. accelerateInterpolator; import android. view. animation. alphaAnimation; import android. view. animation. animation; import android. view. animation. decelerateInterpolator; import android. widget. frameLayout; import android. widget. tabWidget; import android. widget. textView;/*** A simple text label view that can be applied as a "ba Dge "to any given {@ link android. view. view }. * This class is intended to be instantiated at runtime rather than encoded ded in XML layouts. ** @ author Jeff Gilfelt */public class BadgeView extends TextView {public static final int POSITION_TOP_LEFT = 1; public static final int POSITION_TOP_RIGHT = 2; public static final int POSITION_BOTTOM_LEFT = 3; public static final int POSITION_BOTTOM_RIGHT = 4; pub Lic static final int POSITION_CENTER = 5; private static final int DEFAULT_MARGIN_DIP = 10; private static final int finished = 8; private static final int finished = 10; private static final int DEFAULT_POSITION = POSITION_TOP_RIGHT; private static final int DEFAULT_BADGE_COLOR = Color. parseColor ("# CCFF0000"); // Color. RED; private static final int DEFAULT_TEXT_COLOR = Col Or. WHITE; private static Animation fadeIn; private static Animation fadeOut; private Context context; private View target; private int badgePosition; private int badgeMarginH; private int badgeMarginV; private int badgeColor; private boolean isShown; private ShapeDrawable badgeBg; private int targetTabIndex; public BadgeView (Context context) {this (context, (AttributeSet) null, android. r. attr. textViewStyle);} p Ublic BadgeView (Context context, AttributeSet attrs) {this (context, attrs, android. r. attr. textViewStyle);}/*** Constructor-** create a new BadgeView instance attached to a target {@ link android. view. view }. ** @ param context for this view. * @ param target the View to attach the badge. */public BadgeView (Context context, View target) {this (context, null, android. r. attr. textViewStyl E, target, 0);}/*** Constructor-** create a new BadgeView instance attached to a target {@ link android. widget. tabWidget} * tab at a given index. ** @ param context for this view. * @ param target the TabWidget to attach the badge. * @ param index the position of the tab within the target. */public BadgeView (Context context, TabWidget target, int index) {this (context, null, android. r. a Ttr. textViewStyle, target, index);} public BadgeView (Context context, AttributeSet attrs, int defStyle) {this (context, attrs, defStyle, null, 0 );} public BadgeView (Context context, AttributeSet attrs, int defStyle, View target, int tabIndex) {super (context, attrs, defStyle); init (context, target, tabIndex );} private void init (Context context, View target, int tabIndex) {this. context = context+this.tar Get = targetdomainthis.tar getTabIndex = tabIndex; // apply defaultsbadgePosition = DEFAULT_POSITION; badgeMarginH = dipToPixels (optional); badgeMarginV = badgeMarginH; badgeColor = regular; setTypeface (Typeface. DEFAULT_BOLD); int paddingPixels = dipToPixels (bytes); setPadding (paddingPixels, 0, paddingPixels, 0); setTextColor (DEFAULT_TEXT_COLOR); setTextSize (18366f); fadeIn = New AlphaAnimation (0, 1); fadeIn. setInterpolator (new DecelerateInterpolator (); fadeIn. setDuration (200); fadeOut = new AlphaAnimation (1, 0); fadeOut. setInterpolator (new AccelerateInterpolator (); fadeOut. setDuration (200); isShown = false; if (this.tar get! = Null) define applyto(this.tar get);} else {show () ;}} private void applyTo (View target) {LayoutParams lp = target. getLayoutParams (); ViewParent parent = target. getParent (); FrameLayout container = new FrameLayout (context); if (target instanceof TabWidget) {// set target to the relevant tab child containertarget = (TabWidget) Quit get = target; (ViewGroup) target). AddView (container, new LayoutParams (LayoutParams. FILL_PARENT, LayoutParams. FILL_PARENT); this. setVisibility (View. GONE); container. addView (this);} else {// TODO verify that parent is indeed a ViewGroupViewGroup group = (ViewGroup) parent; int index = group. indexOfChild (target); group. removeView (target); group. addView (container, index, lp); container. addView (target); this. setVisibility (View. GONE); contai Ner. addView (this); group. invalidate () ;}}/*** Make the badge visible in the UI. **/public void show () {show (false, null);}/*** Make the badge visible in the UI. ** @ param animate flag to apply the default fade-in animation. */public void show (boolean animate) {show (animate, fadeIn);}/*** Make the badge visible in the UI. ** @ param anim Animation to apply to the view when made visible. */public Void show (Animation anim) {show (true, anim);}/*** Make the badge non-visible in the UI. **/public void hide () {hide (false, null);}/*** Make the badge non-visible in the UI. ** @ param animate flag to apply the default fade-out animation. */public void hide (boolean animate) {hide (animate, fadeOut);}/*** Make the badge non-visible in the UI. ** @ param anim Animation to apply to the view when m Ade non-visible. */public void hide (Animation anim) {hide (true, anim);}/*** Toggle the badge visibility in the UI. **/public void toggle () {toggle (false, null, null);}/*** Toggle the badge visibility in the UI. ** @ param animate flag to apply the default fade-in/out animation. */public void toggle (boolean animate) {toggle (animate, fadeIn, fadeOut);}/*** Toggle the badge visibility in the UI. ** @ Param animIn Animation to apply to the view when made visible. * @ param animOut Animation to apply to the view when made non-visible. */public void toggle (Animation animIn, Animation animOut) {toggle (true, animIn, animOut);} private void show (boolean animate, Animation anim) {if (getBackground () = null) {if (badgeBg = null) {badgeBg = getDefaultBackground ();} setBackgroundDrawable (badgeBg);} PplyLayoutParams (); if (animate) {this. startAnimation (anim);} this. setVisibility (View. VISIBLE); isShown = true;} private void hide (boolean animate, Animation anim) {this. setVisibility (View. GONE); if (animate) {this. startAnimation (anim);} isShown = false;} private void toggle (boolean animate, Animation animIn, Animation animOut) {if (isShown) {hide (animate & (animOut! = Null), animOut);} else {show (animate & (animIn! = Null), animIn) ;}}/*** Increment the numeric badge label. if the current badge label cannot be converted to * an integer value, its label will be set to "0 ". ** @ param offset the increment offset. */public int increment (int offset) {CharSequence txt = getText (); int I; if (txt! = Null) {try {I = Integer. parseInt (txt. toString ();} catch (NumberFormatException e) {I = 0 ;}} else {I = 0 ;} I = I + offset; setText (String. valueOf (I); return I;}/*** Decrement the numeric badge label. if the current badge label cannot be converted to * an integer value, its label will be set to "0 ". ** @ param offset the decrement offset. */public int decrement (int offset) {return increment (-offset );} Private ShapeDrawable getDefaultBackground () {int r = dipToPixels (DEFAULT_CORNER_RADIUS_DIP); float [] outerR = new float [] {r, r, r, r}; RoundRectShape rr = new RoundRectShape (outerR, null, null); ShapeDrawable drawable = new ShapeDrawable (rr); drawable. getPaint (). setColor (badgeColor); return drawable;} private void applyLayoutParams () {FrameLayout. layoutParams lp = new FrameLayout. layou TParams (LayoutParams. WRAP_CONTENT, LayoutParams. WRAP_CONTENT); switch (badgePosition) {case POSITION_TOP_LEFT: lp. gravity = Gravity. LEFT | Gravity. TOP; lp. setMargins (badgeMarginH, badgeMarginV, 0, 0); break; case POSITION_TOP_RIGHT: lp. gravity = Gravity. RIGHT | Gravity. TOP; lp. setMargins (0, badgeMarginV, badgeMarginH, 0); break; case POSITION_BOTTOM_LEFT: lp. gravity = Gravity. LEFT | Gravity. BOTTOM; lp. setMar Gins (badgeMarginH, 0, 0, badgeMarginV); break; case POSITION_BOTTOM_RIGHT: lp. gravity = Gravity. RIGHT | Gravity. BOTTOM; lp. setMargins (0, 0, badgeMarginH, badgeMarginV); break; case POSITION_CENTER: lp. gravity = Gravity. CENTER; lp. setMargins (0, 0, 0, 0); break; default: break;} setLayoutParams (lp);}/*** Returns the target View this badge has been attached. **/public View getTarget () {return target ;}/*** Is this badge currently visible in the UI? **/@ Overridepublic boolean isShown () {return isShown;}/*** Returns the positioning of this badge. ** one of POSITION_TOP_LEFT, POSITION_TOP_RIGHT, POSITION_BOTTOM_LEFT, POSITION_BOTTOM_RIGHT, POSTION_CENTER. **/public int getBadgePosition () {return badgePosition;}/*** Set the positioning of this badge. ** @ param layoutPosition one of POSITION_TOP_LEFT, POSITION_TOP_RIGHT, POSITION_BOTTOM_LEFT, POSITION_BOTTOM_RIGHT, POSTION_CENTER. **/public void setBadgePosition (int layoutPosition) {this. badgePosition = layoutPosition;}/*** Returns the horizontal margin from the target View that is applied to this badge. **/public int getHorizontalBadgeMargin () {return badgeMarginH;}/*** Returns the vertical margin from the target View that is applied to this badge. **/public int getVerticalBadgeMargin () {return badgeMarginV;}/*** Set the horizontal/vertical margin from the target View that is applied to this badge. ** @ param badgeMargin the margin in pixels. */public void setBadgeMargin (int badgeMargin) {this. badgeMarginH = badgeMargin; this. badgeMarginV = badgeMargin;}/*** Set the horizontal/vertical margin from the target View that is applied to this badge. ** @ param horizontal margin in pixels. * @ param vertical margin in pixels. */public void setBadgeMargin (int horizontal, int vertical) {this. badgeMarginH = horizontal; this. badgeMarginV = vertical;}/*** Returns the color value of the badge background. **/public int getBadgeBackgroundColor () {return badgeColor;}/*** Set the color value of the badge background. ** @ param badgeColor the badge background color. */public void setBadgeBackgroundColor (int badgeColor) {this. badgeColor = badgeColor; badgeBg = getDefaultBackground ();} // general method for converting px using dip/function private int dipToPixels (int dip) {Resources r = getResources (); float px = TypedValue. applyDimension (TypedValue. COMPLEX_UNIT_DIP, dip, r. getDisplayMetrics (); return (int) px ;}}
Usage:
RelativeLayout dh = (RelativeLayout) view. findViewById (R. id. dh); BadgeView badge = new BadgeView (context, dh); badge. setText ("1"); // disappears with the actual badge. show (); // badge. toggle ();
Code from github's open source project https://github.com/jgilfelt/android-viewbadger
Collect it by yourself!
Record and share, let you grow together! Welcome to my other blog; my blog address: http://blog.csdn.net/caicongyang