BadgeView-安卓数字显示控件

来源:互联网 发布:ad hoc网络 举例 编辑:程序博客网 时间:2024/06/16 17:41

BadgeView使用方法参考http://blog.csdn.net/crazy1235/article/details/42262369/

        BadgeView代码如下:

   public class BadgeView extends TextView {    private boolean mHideOnNull = true;    public BadgeView(Context context) {        this(context, null);    }    public BadgeView(Context context, AttributeSet attrs) {        this(context, attrs, android.R.attr.textViewStyle);    }    public BadgeView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        init();    }    private void init() {        if (!(getLayoutParams() instanceof LayoutParams)) {            LayoutParams layoutParams =                    new LayoutParams(                            ViewGroup.LayoutParams.WRAP_CONTENT,                            ViewGroup.LayoutParams.WRAP_CONTENT,                            Gravity.RIGHT | Gravity.TOP);            setLayoutParams(layoutParams);        }        // set default font        setTextColor(Color.WHITE);        setTypeface(Typeface.DEFAULT_BOLD);        setTextSize(TypedValue.COMPLEX_UNIT_SP, 11);        setPadding(dip2Px(5), dip2Px(1), dip2Px(5), dip2Px(1));          // set default background        setBackground(9, Color.parseColor("#d3321b"));        setGravity(Gravity.CENTER);        // default values        setHideOnNull(true);        setBadgeCount(0);    }    public void setBackground(int dipRadius, int badgeColor) {        int radius = dip2Px(dipRadius);        float[] radiusArray = new float[] { radius, radius, radius, radius, radius, radius, radius, radius };        RoundRectShape roundRect = new RoundRectShape(radiusArray, null, null);    设置一个圆角矩形为背景        ShapeDrawable bgDrawable = new ShapeDrawable(roundRect);        bgDrawable.getPaint().setColor(badgeColor);        setBackground(bgDrawable);    }    /**     * @return Returns true if view is hidden on badge value 0 or null;     */    public boolean isHideOnNull() {        return mHideOnNull;    }    /**     * @param hideOnNull the hideOnNull to set     */    public void setHideOnNull(boolean hideOnNull) {        mHideOnNull = hideOnNull;        setText(getText());    }    /*     * (non-Javadoc)     *      * @see android.widget.TextView#setText(java.lang.CharSequence, android.widget.TextView.BufferType)     */    @Override    public void setText(CharSequence text, BufferType type) {        if (isHideOnNull() && (text == null || text.toString().equalsIgnoreCase("0"))) {            setVisibility(View.GONE);        } else {            setVisibility(View.VISIBLE);        }        super.setText(text, type);    }    public void setBadgeCount(int count) {        setText(String.valueOf(count));    }    public Integer getBadgeCount() {        if (getText() == null) {            return null;        }        String text = getText().toString();        try {            return Integer.parseInt(text);        } catch (NumberFormatException e) {            return null;        }    }    public void setBadgeGravity(int gravity) {                   //设置显示位置        LayoutParams params = (LayoutParams) getLayoutParams();        params.gravity = gravity;        setLayoutParams(params);    }    public void setBadgeMargin(int dipMargin) {                       //设置Margin值        setBadgeMargin(dipMargin, dipMargin, dipMargin, dipMargin);    }    public void setBadgeMargin(int leftDipMargin, int topDipMargin, int rightDipMargin, int bottomDipMargin) {        LayoutParams params = (LayoutParams) getLayoutParams();        params.leftMargin = dip2Px(leftDipMargin);        params.topMargin = dip2Px(topDipMargin);        params.rightMargin = dip2Px(rightDipMargin);        params.bottomMargin = dip2Px(bottomDipMargin);        setLayoutParams(params);    }    public int[] getBadgeMargin() {        LayoutParams params = (LayoutParams) getLayoutParams();        return new int[] { params.leftMargin, params.topMargin, params.rightMargin, params.bottomMargin };    }    public void incrementBadgeCount(int increment) {        Integer count = getBadgeCount();        if (count == null) {            setBadgeCount(increment);        } else {            setBadgeCount(increment + count);        }    }    public void decrementBadgeCount(int decrement) {        incrementBadgeCount(-decrement);    }    /*     * Attach the BadgeView to the TabWidget     *      * @param target the TabWidget to attach the BadgeView     *      * @param tabIndex index of the tab     */    public void setTargetView(TabWidget target, int tabIndex) {     //设置依附在哪一个控件        View tabView = target.getChildTabViewAt(tabIndex);        setTargetView(tabView);    }    /*     * Attach the BadgeView to the target view     *      * @param target the view to attach the BadgeView     */    public void setTargetView(View target) {        if (getParent() != null) {            ((ViewGroup) getParent()).removeView(this);        }        if (target == null) {            return;        }        if (target.getParent() instanceof FrameLayout) {     //  FrameLayout同样属于ViewGroup一种,这个判断感觉没什么用            ((FrameLayout) target.getParent()).addView(this);        } else if (target.getParent() instanceof ViewGroup) {            // use a new Framelayout container for adding badge            ViewGroup parentContainer = (ViewGroup) target.getParent();   //获取所依附的组件的父控件            int groupIndex = parentContainer.indexOfChild(target);       //获取所依附的组件在父控件的位置            parentContainer.removeView(target);                           //从父控件移除            FrameLayout badgeContainer = new FrameLayout(getContext());      //新建一个帧布局            ViewGroup.LayoutParams parentLayoutParams = target.getLayoutParams();   //布局参数和依附参数相同            badgeContainer.setLayoutParams(parentLayoutParams);            target.setLayoutParams(new ViewGroup.LayoutParams(                ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));            parentContainer.addView(badgeContainer, groupIndex, parentLayoutParams);     依附组建的父布局在指定位置加入这个FrameLayout            badgeContainer.addView(target);       //在FrameLayou中添加Target和当前的数字控件            badgeContainer.addView(this);        } else if (target.getParent() == null) {            Log.e(getClass().getSimpleName(), "ParentView is needed");        }    }    /*     * converts dip to px  dp转化为PX     */    private int dip2Px(float dip) {        return (int) (dip * getContext().getResources().getDisplayMetrics().density + 0.5f);    }}

0 0
原创粉丝点击