// Path: app/src/main/java/com/rance/chatui/util/Utils.java
// public class Utils {
//     /**
//      * dp转dip
//      *
//      * @param context
//      * @param dp
//      * @return
//      */
//     public static int dp2px(Context context, float dp) {
//         float density = context.getResources().getDisplayMetrics().density;
//         return (int) (dp * density + 0.5F);
//     }
// 
//     /**
//      * 文本中的emojb字符处理为表情图片
//      *
//      * @param context
//      * @param tv
//      * @param source
//      * @return
//      */
//     public static SpannableString getEmotionContent(final Context context, final TextView tv, String source) {
//         SpannableString spannableString = new SpannableString(source);
//         Resources res = context.getResources();
// 
//         String regexEmotion = "\\[([\u4e00-\u9fa5\\w])+\\]";
//         Pattern patternEmotion = Pattern.compile(regexEmotion);
//         Matcher matcherEmotion = patternEmotion.matcher(spannableString);
// 
//         while (matcherEmotion.find()) {
//             // 获取匹配到的具体字符
//             String key = matcherEmotion.group();
//             // 匹配字符串的开始位置
//             int start = matcherEmotion.start();
//             // 利用表情名字获取到对应的图片
//             Integer imgRes = EmotionUtils.EMOTION_STATIC_MAP.get(key);
//             if (imgRes != null) {
//                 // 压缩表情图片
//                 int size = (int) tv.getTextSize() * 13 / 8;
//                 Bitmap bitmap = BitmapFactory.decodeResource(res, imgRes);
//                 Bitmap scaleBitmap = Bitmap.createScaledBitmap(bitmap, size, size, true);
// 
//                 ImageSpan span = new ImageSpan(context, scaleBitmap);
//                 spannableString.setSpan(span, start, start + key.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//             }
//         }
//         return spannableString;
//     }
// 
//     /**
//      * 返回当前时间的格式为 yyyyMMddHHmmss
//      *
//      * @return
//      */
//     public static String getCurrentTime() {
//         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
//         return sdf.format(System.currentTimeMillis());
//     }
// 
//     //毫秒转秒
//     public static String long2String(long time) {
//         //毫秒转秒
//         int sec = (int) time / 1000;
//         int min = sec / 60;    //分钟
//         sec = sec % 60;        //秒
//         if (min < 10) {    //分钟补0
//             if (sec < 10) {    //秒补0
//                 return "0" + min + ":0" + sec;
//             } else {
//                 return "0" + min + ":" + sec;
//             }
//         } else {
//             if (sec < 10) {    //秒补0
//                 return min + ":0" + sec;
//             } else {
//                 return min + ":" + sec;
//             }
//         }
//     }
// 
//     /**
//      * 毫秒转化时分秒毫秒
//      *
//      * @param ms
//      * @return
//      */
//     public static String formatTime(Long ms) {
//         Integer ss = 1000;
//         Integer mi = ss * 60;
//         Integer hh = mi * 60;
//         Integer dd = hh * 24;
// 
//         Long day = ms / dd;
//         Long hour = (ms - day * dd) / hh;
//         Long minute = (ms - day * dd - hour * hh) / mi;
//         Long second = (ms - day * dd - hour * hh - minute * mi) / ss;
// 
//         StringBuffer sb = new StringBuffer();
//         if (day > 0) {
//             sb.append(day + "d");
//         }
//         if (hour > 0) {
//             sb.append(hour + "h");
//         }
//         if (minute > 0) {
//             sb.append(minute + "′");
//         }
//         if (second > 0) {
//             sb.append(second + "″");
//         }
//         return sb.toString();
//     }
// }


import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import com.rance.chatui.R;
import com.rance.chatui.util.Utils;
import java.util.ArrayList;
package com.rance.chatui.widget;




/**
 * 作者：Rance on 2016/11/29 10:47
 * 邮箱：rance935@163.com
 * 自定义表情底部指示器
 */
public class IndicatorView extends LinearLayout {

    private Context mContext;
    private ArrayList<View> mImageViews;//所有指示器集合
    private int size = 6;
    private int marginSize = 15;
    private int pointSize;//指示器的大小
    private int marginLeft;//间距

    public IndicatorView(Context context) {
        this(context, null);
    }

    public IndicatorView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public IndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext = context;
// Path: app/src/main/java/com/rance/chatui/util/Utils.java
// public class Utils {
//     /**
//      * dp转dip
//      *
//      * @param context
//      * @param dp
//      * @return
//      */
//     public static int dp2px(Context context, float dp) {
//         float density = context.getResources().getDisplayMetrics().density;
//         return (int) (dp * density + 0.5F);
//     }
// 
//     /**
//      * 文本中的emojb字符处理为表情图片
//      *
//      * @param context
//      * @param tv
//      * @param source
//      * @return
//      */
//     public static SpannableString getEmotionContent(final Context context, final TextView tv, String source) {
//         SpannableString spannableString = new SpannableString(source);
//         Resources res = context.getResources();
// 
//         String regexEmotion = "\\[([\u4e00-\u9fa5\\w])+\\]";
//         Pattern patternEmotion = Pattern.compile(regexEmotion);
//         Matcher matcherEmotion = patternEmotion.matcher(spannableString);
// 
//         while (matcherEmotion.find()) {
//             // 获取匹配到的具体字符
//             String key = matcherEmotion.group();
//             // 匹配字符串的开始位置
//             int start = matcherEmotion.start();
//             // 利用表情名字获取到对应的图片
//             Integer imgRes = EmotionUtils.EMOTION_STATIC_MAP.get(key);
//             if (imgRes != null) {
//                 // 压缩表情图片
//                 int size = (int) tv.getTextSize() * 13 / 8;
//                 Bitmap bitmap = BitmapFactory.decodeResource(res, imgRes);
//                 Bitmap scaleBitmap = Bitmap.createScaledBitmap(bitmap, size, size, true);
// 
//                 ImageSpan span = new ImageSpan(context, scaleBitmap);
//                 spannableString.setSpan(span, start, start + key.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//             }
//         }
//         return spannableString;
//     }
// 
//     /**
//      * 返回当前时间的格式为 yyyyMMddHHmmss
//      *
//      * @return
//      */
//     public static String getCurrentTime() {
//         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
//         return sdf.format(System.currentTimeMillis());
//     }
// 
//     //毫秒转秒
//     public static String long2String(long time) {
//         //毫秒转秒
//         int sec = (int) time / 1000;
//         int min = sec / 60;    //分钟
//         sec = sec % 60;        //秒
//         if (min < 10) {    //分钟补0
//             if (sec < 10) {    //秒补0
//                 return "0" + min + ":0" + sec;
//             } else {
//                 return "0" + min + ":" + sec;
//             }
//         } else {
//             if (sec < 10) {    //秒补0
//                 return min + ":0" + sec;
//             } else {
//                 return min + ":" + sec;
//             }
//         }
//     }
// 
//     /**
//      * 毫秒转化时分秒毫秒
//      *
//      * @param ms
//      * @return
//      */
//     public static String formatTime(Long ms) {
//         Integer ss = 1000;
//         Integer mi = ss * 60;
//         Integer hh = mi * 60;
//         Integer dd = hh * 24;
// 
//         Long day = ms / dd;
//         Long hour = (ms - day * dd) / hh;
//         Long minute = (ms - day * dd - hour * hh) / mi;
//         Long second = (ms - day * dd - hour * hh - minute * mi) / ss;
// 
//         StringBuffer sb = new StringBuffer();
//         if (day > 0) {
//             sb.append(day + "d");
//         }
//         if (hour > 0) {
//             sb.append(hour + "h");
//         }
//         if (minute > 0) {
//             sb.append(minute + "′");
//         }
//         if (second > 0) {
//             sb.append(second + "″");
//         }
//         return sb.toString();
//     }
// }


// Path: app/src/main/java/com/rance/chatui/widget/IndicatorView.java
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import com.rance.chatui.R;
import com.rance.chatui.util.Utils;
import java.util.ArrayList;

package com.rance.chatui.widget;




/**
 * 作者：Rance on 2016/11/29 10:47
 * 邮箱：rance935@163.com
 * 自定义表情底部指示器
 */
public class IndicatorView extends LinearLayout {

    private Context mContext;
    private ArrayList<View> mImageViews;//所有指示器集合
    private int size = 6;
    private int marginSize = 15;
    private int pointSize;//指示器的大小
    private int marginLeft;//间距

    public IndicatorView(Context context) {
        this(context, null);
    }

    public IndicatorView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public IndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext = context;
        pointSize = Utils.dp2px(context, size);