// Path: library/src/main/java/com/jpeng/jptabbar/DensityUtils.java
// public class DensityUtils {
// 
//     public static int dp2sp(Context context, float dipValue) {
//         float pxValue = dp2px(context, dipValue);
//         return px2sp(context, pxValue);
//     }
// 
//     public static int sp2dp(@NonNull Context context, float spValue) {
//         float pxValue = sp2px(context, spValue);
//         return px2dp(context, pxValue);
//     }
// 
//     public static int px2dp(@NonNull Context context, float pxValue) {
//         final float scale = context.getResources().getDisplayMetrics().density;
//         return (int) (pxValue / scale);
//     }
// 
//     public static int dp2px(@NonNull Context context, float dipValue) {
//         final float scale = context.getResources().getDisplayMetrics().density;
//         return (int) (dipValue * scale);
//     }
// 
//     public static int px2sp(@NonNull Context context, float pxValue) {
//         final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
//         return (int) (pxValue / fontScale);
//     }
// 
//     public static int sp2px(@NonNull Context context, float spValue) {
//         final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
//         return (int) (spValue * fontScale);
//     }
// 
// }


import android.content.Context;
import android.graphics.*;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import com.jpeng.jptabbar.DensityUtils;
     * 是否正在拖动
     */
    private boolean mIsDraging;
    /**
     * 拖动大于BGABadgeViewHelper.mMoveHiddenThreshold后抬起手指徽章消失的代理
     */
    private DragDismissDelegate mDelegage;
    private boolean mIsShowDrawable = false;

    public BadgeViewHelper(Badgeable badgeable, Context context, AttributeSet attrs, BadgeGravity defaultBadgeGravity) {
        mBadgeable = badgeable;
        initDefaultAttrs(context, defaultBadgeGravity);
        afterInitDefaultAndCustomAttrs();
        mDropBadgeView = new DragBadgeView(context, this);
    }

    private void initDefaultAttrs(Context context, BadgeGravity defaultBadgeGravity) {
        mBadgeNumberRect = new Rect();
        mBadgeRectF = new RectF();
        mBadgeBgColor = Color.RED;
        mBadgeTextColor = Color.WHITE;
        mBadgeTextSize = DensityUtils.sp2px(context, 10);

        mBadgePaint = new Paint();
        mBadgePaint.setAntiAlias(true);
        mBadgePaint.setStyle(Paint.Style.FILL);
        // 设置mBadgeText居中，保证mBadgeText长度为1时，文本也能居中
        mBadgePaint.setTextAlign(Paint.Align.CENTER);

        mBadgePadding = DensityUtils.dp2px(context, 4);
// Path: library/src/main/java/com/jpeng/jptabbar/DensityUtils.java
// public class DensityUtils {
// 
//     public static int dp2sp(Context context, float dipValue) {
//         float pxValue = dp2px(context, dipValue);
//         return px2sp(context, pxValue);
//     }
// 
//     public static int sp2dp(@NonNull Context context, float spValue) {
//         float pxValue = sp2px(context, spValue);
//         return px2dp(context, pxValue);
//     }
// 
//     public static int px2dp(@NonNull Context context, float pxValue) {
//         final float scale = context.getResources().getDisplayMetrics().density;
//         return (int) (pxValue / scale);
//     }
// 
//     public static int dp2px(@NonNull Context context, float dipValue) {
//         final float scale = context.getResources().getDisplayMetrics().density;
//         return (int) (dipValue * scale);
//     }
// 
//     public static int px2sp(@NonNull Context context, float pxValue) {
//         final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
//         return (int) (pxValue / fontScale);
//     }
// 
//     public static int sp2px(@NonNull Context context, float spValue) {
//         final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
//         return (int) (spValue * fontScale);
//     }
// 
// }


// Path: library/src/main/java/com/jpeng/jptabbar/badgeview/BadgeViewHelper.java
import android.content.Context;
import android.graphics.*;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import com.jpeng.jptabbar.DensityUtils;

     * 是否正在拖动
     */
    private boolean mIsDraging;
    /**
     * 拖动大于BGABadgeViewHelper.mMoveHiddenThreshold后抬起手指徽章消失的代理
     */
    private DragDismissDelegate mDelegage;
    private boolean mIsShowDrawable = false;

    public BadgeViewHelper(Badgeable badgeable, Context context, AttributeSet attrs, BadgeGravity defaultBadgeGravity) {
        mBadgeable = badgeable;
        initDefaultAttrs(context, defaultBadgeGravity);
        afterInitDefaultAndCustomAttrs();
        mDropBadgeView = new DragBadgeView(context, this);
    }

    private void initDefaultAttrs(Context context, BadgeGravity defaultBadgeGravity) {
        mBadgeNumberRect = new Rect();
        mBadgeRectF = new RectF();
        mBadgeBgColor = Color.RED;
        mBadgeTextColor = Color.WHITE;
        mBadgeTextSize = DensityUtils.sp2px(context, 10);

        mBadgePaint = new Paint();
        mBadgePaint.setAntiAlias(true);
        mBadgePaint.setStyle(Paint.Style.FILL);
        // 设置mBadgeText居中，保证mBadgeText长度为1时，文本也能居中
        mBadgePaint.setTextAlign(Paint.Align.CENTER);

        mBadgePadding = DensityUtils.dp2px(context, 4);
        mBadgeVerticalMargin = DensityUtils.dp2px(context, 0);