• Android之开源中国客户端源码分析(二)


    1、 加载动画圈实现

    <ProgressBar 
            android:id="@+id/main_head_progress" 
            style="@style/loading_small"
            android:layout_toRightOf="@id/main_head_title"
            android:layout_centerVertical="true"
            android:layout_marginLeft="5.0dip"
            android:visibility="gone"/>
    @style/loading_small
    <item name="android:indeterminateDrawable">@anim/loading</item>

    @anim/loading
    <?xml version="1.0" encoding="UTF-8"?>
    <animation-list android:oneshot="false"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:duration="100" android:drawable="@drawable/loading_0" />
        <item android:duration="100" android:drawable="@drawable/loading_1" />
        <item android:duration="100" android:drawable="@drawable/loading_2" />
        <item android:duration="100" android:drawable="@drawable/loading_3" />
        <item android:duration="100" android:drawable="@drawable/loading_4" />
        <item android:duration="100" android:drawable="@drawable/loading_5" />
        <item android:duration="100" android:drawable="@drawable/loading_6" />
        <item android:duration="100" android:drawable="@drawable/loading_7" />
    </animation-list> 


    显示:Progress.setVisibility(ProgressBar.VISIBLE);

    消失:Progress.setVisibility(ProgressBar.GONE);

    工具类StringUtil:

    public class StringUtils 
    {
        private final static Pattern emailer = Pattern.compile("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
        //private final static SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //private final static SimpleDateFormat dateFormater2 = new SimpleDateFormat("yyyy-MM-dd");
        
        private final static ThreadLocal<SimpleDateFormat> dateFormater = new ThreadLocal<SimpleDateFormat>() {
            @Override
            protected SimpleDateFormat initialValue() {
                return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            }
        };
    
        private final static ThreadLocal<SimpleDateFormat> dateFormater2 = new ThreadLocal<SimpleDateFormat>() {
            @Override
            protected SimpleDateFormat initialValue() {
                return new SimpleDateFormat("yyyy-MM-dd");
            }
        };
        
        /**
         * 将字符串转位日期类型
         * @param sdate  sdate的样式:2013-09-23 17:10:35
         * @return
         */
        public static Date toDate(String sdate) {
            try {
                return dateFormater.get().parse(sdate);
            } catch (ParseException e) {
                return null;
            }
        }
        
        /**
         * 以友好的方式显示时间
         * @param sdate
         * @return
         */
        public static String friendly_time(String sdate) {
            Date time = toDate(sdate);
            if(time == null) {
                return "Unknown";
            }
            String ftime = "";
            Calendar cal = Calendar.getInstance();
            
            //判断是否是同一天
            String curDate = dateFormater2.get().format(cal.getTime());
            String paramDate = dateFormater2.get().format(time);
            if(curDate.equals(paramDate)){
                int hour = (int)((cal.getTimeInMillis() - time.getTime())/3600000);
                if(hour == 0)
                    ftime = Math.max((cal.getTimeInMillis() - time.getTime()) / 60000,1)+"分钟前";
                else 
                    ftime = hour+"小时前";
                return ftime;
            }
            
            long lt = time.getTime()/86400000;
            long ct = cal.getTimeInMillis()/86400000;
            int days = (int)(ct - lt);        
            if(days == 0){
                int hour = (int)((cal.getTimeInMillis() - time.getTime())/3600000);
                if(hour == 0)
                    ftime = Math.max((cal.getTimeInMillis() - time.getTime()) / 60000,1)+"分钟前";
                else 
                    ftime = hour+"小时前";
            }
            else if(days == 1){
                ftime = "昨天";
            }
            else if(days == 2){
                ftime = "前天";
            }
            else if(days > 2 && days <= 10){ 
                ftime = days+"天前";            
            }
            else if(days > 10){            
                ftime = dateFormater2.get().format(time);
            }
            return ftime;
        }
        
        /**
         * 判断给定字符串时间是否为今日
         * @param sdate
         * @return boolean
         */
        public static boolean isToday(String sdate){
            boolean b = false;
            Date time = toDate(sdate);
            Date today = new Date();
            if(time != null){
                String nowDate = dateFormater2.get().format(today);
                String timeDate = dateFormater2.get().format(time);
                if(nowDate.equals(timeDate)){
                    b = true;
                }
            }
            return b;
        }
        
        /**
         * 判断给定字符串是否空白串。
         * 空白串是指由空格、制表符、回车符、换行符组成的字符串
         * 若输入字符串为null或空字符串,返回true
         * @param input
         * @return boolean
         */
        public static boolean isEmpty( String input ) 
        {
            if ( input == null || "".equals( input ) )
                return true;
            
            for ( int i = 0; i < input.length(); i++ ) 
            {
                char c = input.charAt( i );
                if ( c != ' ' && c != '	' && c != '
    ' && c != '
    ' )
                {
                    return false;
                }
            }
            return true;
        }
    
        /**
         * 判断是不是一个合法的电子邮件地址
         * @param email
         * @return
         */
        public static boolean isEmail(String email){
            if(email == null || email.trim().length()==0) 
                return false;
            return emailer.matcher(email).matches();
        }
        /**
         * 字符串转整数
         * @param str
         * @param defValue
         * @return
         */
        public static int toInt(String str, int defValue) {
            try{
                return Integer.parseInt(str);
            }catch(Exception e){}
            return defValue;
        }
        /**
         * 对象转整数
         * @param obj
         * @return 转换异常返回 0
         */
        public static int toInt(Object obj) {
            if(obj==null) return 0;
            return toInt(obj.toString(),0);
        }
        /**
         * 对象转整数
         * @param obj
         * @return 转换异常返回 0
         */
        public static long toLong(String obj) {
            try{
                return Long.parseLong(obj);
            }catch(Exception e){}
            return 0;
        }
        /**
         * 字符串转布尔值
         * @param b
         * @return 转换异常返回 false
         */
        public static boolean toBool(String b) {
            try{
                return Boolean.parseBoolean(b);
            }catch(Exception e){}
            return false;
        }
    }
  • 相关阅读:
    Scite 编辑器及其相关项目介绍
    cmake 常用指令入门指南
    C++中的POD类型
    引用折叠、万能引用和完美转发那些事
    c++的对象初始化
    C++类对象的内存布局
    effective C++ 读书精华笔记提取
    c/c++的const说明符——深入挖掘
    gdb调试器—常用知识(一)
    g++/gcc编译器——常用知识(一)
  • 原文地址:https://www.cnblogs.com/lee0oo0/p/3335708.html
Copyright © 2020-2023  润新知