当前位置:  编程技术>移动开发
本页文章导读:
    ▪技术-Java        技术---Java 怎样成为一名Android开发者hris(克里斯)是一位来自波兰的Android应用开发者,最为一名非著名的开发者他开发的应用在Android Market上免费提供下载,并通过广告获得收入,最近他在.........
    ▪ ListView 分段展示        ListView 分段显示 Android market里软件列表,每页显示10条记录,没有显示上一页,下一页的按钮,依靠手滑动动态加载数据,当向下滚动时,最下边显示 Loading… 。数据加载结束,Loading底栏消.........
    ▪ 中国阴历算法       中国农历算法 Java代码 /**    * ChineseCalendarGB.java    * Copyright (c) 1997-2002 by Dr. Herong Yang    * 中国农历算法 - 实用于公历 1901 年至 2100 年之间的 200 年    */    import .........

[1]技术-Java
    来源: 互联网  发布时间: 2014-02-18
技术---Java

怎样成为一名Android开发者




hris(克里斯)是一位来自波兰的Android应用开发者,最为一名非著名的开发者他开发的应用在Android Market上免费提供下载,并通过广告获得收入,最近他在自己的博客上面分享了从事Android开发带来的收入情况,并通过自己的经历给予 Android开发入门者非常忠实的忠告。作为国内从事Android开发的同行,APP虎第一时间发现并翻译了他的文章,以与广大Android开发者和即将进入Android开发的人们分享。



很多人认为从事Android开发是一件赔本的买卖。 他们说,如果你想赚钱,你应该转向iPhone,iPad和所有其他的平台。但事实显然不是这样的,虽然从事Android开发并没有让我收入数千美元,但我的收入是稳定的,并且一直在增长。


尽管我并不是顶级的开发者,并且也没有任何应用被Android Market推荐过。 我只是成千上万名Android开发者之间默默无闻的一个,我的应用也不是那么的有名。 但这有什么好奇怪的呢?我所有的应用程序都是免费的,因为谷歌不允许来至我的国家(波兰)的开发者通过Android Market出售应用程序!

所以请你记住这些事实:


1 Android Market从来没有在Top的推荐位置推荐过我的应用程序
2 我只提供(主要是由于Android Market的限制)免费的应用程序
3 即使我能够在Android Market出售应用程序我也不会将它作为主要收入来源(我相信广告才是最主要的收入来源)


我所有的收入都来自应用程序中的广告。 这是它们在Android Market下载次数:


1 X-Ray Scanner(超过268000下载)
2 Cracked Screen(超过182000下载)
3 Virtual Drums (超过20000下载)
4 Daily Beauty Tips (超过11000下载)
5 Don’t push it (超过6 500下载)
6 WP Stats (超过4 000下载)


我从2010年4月开始学习Android应用开发。并且在5月份便发布了我的第一个Android应用——WP Stats,它带给我几美元的收入。虽然我一直期待这个应用是我最受欢迎的应用,可惜它不是。在我已经发布的几个应用程序中,有很多比它更受欢迎。这里是我这几个月通过Android应用的总收入明细:


• 2010年5月 – 4.92美元
• 2010年6月 – 138.87美元
• 2010年7月 – 538.26美元
• 2010年8月 – 920.00美元
• 2010年9月 – 1545.45美元
• 2010年10月 – 1059.31美元


十月份的收入看起来有所下降,但事实上发生这种情况是因为我没有着这一个月之内没有更新过应用程序。因此,大家可以看到,虽然收入不高,但是却是稳步增长的!并且这些收入全部来自广告。


即使这样,在我看来,从事Android开发给我带来的收入甚至远没有达到iPhone开发人员的水平。 但不管怎么说,从事Android开发是非常有前途的,特别是对于新的应用点子有很大的发展空间。下面这些问题是在成为一名开发者之前常常困扰我的,所以,如果你有兴趣让Android开发成为您每月一笔收入来源,这篇文章可能对你有帮助。

我应该熟练的掌握JAVA——事实并非如此!


有很多专家都会非常严肃的说:“你必须要熟练的掌握Java,否则您做梦都不要期望成为一名Android开发者!”。 以我的情况来看,事实并非如此,我仅仅只是对于PHP非常熟练。 至于Java,我一直计划着在空余时间好好的学习它,但是我几乎没有空闲时间,所以我只只是略知皮毛。虽然我购买了《 Thinking in Java 》,但不幸的是到目前为止我还没有看完第三章。 所以,非常基本的Java的基础知识,这就是你所需要的!


我必须先熟练的掌握一种IDE(Eclipse或NetBeans)——这也是错误的!


另外,专家们还会说会说:“你必须要先完美的掌握一种IDE,否则在学习一门新的语言之前你便会掉队!”。专家们总是这么耸人听闻,看来,我不是真正的专家。因为我是在学习 Java Dalvik ( Android apps开发语言) 的同时才开始使用IDE(Eclipse)的。 所以,事实是你只需要在需要使用的时候再开始学习它,而那些IDE专家撰写的有关书籍在大多数情况下是浪费时间和金钱。


我需要拥有一台基于Android的手机——这(再一次)是错误的!


如果你拥有一台Android手机,那当然最好。甚至,你最好能够几台不同系统版本的Android手机来测试你的应用——如果你准备让他们在所有的Android设备中正常工作! 但是事实上这并不能解决所有的问题。 虽然一台真正的Android手机有利于你测试自己的应用程序,但在大多数情况下Android模拟器(包含在Android SDK中)便已经足够了。

那么什么是你真正需要的?


在我看来,想要成为一名真正的Android开发者,你需要拥有这些东西:


• Java基本知识(或任何其他面向对象语言)
• 免费下载的Android SDK(包含Android模拟器)
• 免费的IDE (例如Eclipse)
• 免费的Android文档
还有一些并不是必要的,但可能非常有用的东西:
• 一部Android手机(我的选择是HTC Desire )
• 一本不错的Android开发入门书籍(我买了两本让我非常满意的书籍——《Hello, Android 》和 《Beginning Android 2》


所以,如果你真的想成为一名Android开发者——不要被砖家吓到。只要你肯努力学习它,你会惊奇地发现它是那么的容易!

来源:草根网(www.20ju.com) - 互联网界的读者文摘

    
[2] ListView 分段展示
    来源: 互联网  发布时间: 2014-02-18
ListView 分段显示

Android market里软件列表,每页显示10条记录,没有显示上一页,下一页的按钮,依靠手滑动动态加载数据,当向下滚动时,最下边显示 Loading… 。数据加载结束,Loading底栏消失。

关于ListView的分段显示,有现成的库可用,比如 cwac-endless, 这个库不好之处,就是底部Loading的View无法定制。还有一个在google code上的androidpageablelistview 这个可以实现基本的分页,有手动操作显示上一页,下一页的按钮。

实现思路如下:
自定义 footer view, list_footer.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
    <LinearLayout
        android:gravity="center_vertical|center_horizontal"
        android:orientation="horizontal"
        android:id="@+id/loading_more"
        android:visibility="gone"
        android:layout_width="fill_parent"
        android:layout_height="?android:attr/listPreferredItemHeight"
        >
        <ProgressBar
            android:id="@+android:id/progress_large"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:indeterminate="true"
            
            >
        </ProgressBar>
        <TextView
            android:id="@+id/loading_msg"
            android:paddingLeft="6.0dip"
            android:paddingTop="2.0dip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="1.0dip"
            android:text="@string/loading"
            >
        </TextView>
    </LinearLayout>
</LinearLayout>

用到 ListView addFooterView/removeView 这两个函数。

伪代码 (Pseudocode):

private ListView mListView;
private View mFooterView;
private OnScrollListener mOnListViewScrollListener;

mListView.addFooterView(mFooterView);

mListView.removeView(mFooterView);

mListView.setOnScrollListener(mOnListViewScrollListener);

mOnListViewScrollListener = new OnScrollListener() {

    public void onScroll(AbsListView view, int firstCell, int cellCount,
            int itemCount) {
        if (firstCell != mFirstCell) {
            // balabala
        }
    }

    public void onScrollStateChanged(AbsListView view, int scrollState) {
        // Do nothing
    }
}; 

在onScroll里要处理检查是否还有新的记录,如果有,调用addFooterView,添加记录到adapter, adapter调用 notifyDataSetChanged 更新数据;如果没有记录了, 把自定义的mFooterView去掉。这里没有重写onScrollStateChanged函数,那么在onScroll就需要一个外部变量mFirstCell记录滑动位置。

再看看QQ空间体验版 for Android 是如何实现的,不用多说,show me the code:

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    shouldRefresh = false;

    if (firstVisibleItem + visibleItemCount == totalItemCount) {
        if (bHaveMore()) {
            if (list.getFooterViewsCount() == 0) {
                addRefreshfoot();
            } else {
                shouldRefresh = true;
            }
        }
    }
}

public void onScrollStateChanged(AbsListView view, int scrollState) {
    if (shouldRefresh && scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
        if (isRefreshing == false) {
            isRefreshing = true;
            getMoreList();
        }
    }
} 
转载:http://blog.lytsing.org/archives/322.html


    
[3] 中国阴历算法
    来源: 互联网  发布时间: 2014-02-18
中国农历算法
Java代码
  • /**  
  •  * ChineseCalendarGB.java  
  •  * Copyright (c) 1997-2002 by Dr. Herong Yang  
  •  * 中国农历算法 - 实用于公历 1901 年至 2100 年之间的 200 年  
  •  */   
  • import  java.text.*;  
  • import  java.util.*;  
  • class  ChineseCalendarGB {  
  •    private   int  gregorianYear;  
  •    private   int  gregorianMonth;  
  •    private   int  gregorianDate;  
  •    private   boolean  isGregorianLeap;  
  •    private   int  dayOfYear;  
  •    private   int  dayOfWeek;  // 周日一星期的第一天   
  •    private   int  chineseYear;  
  •    private   int  chineseMonth;  // 负数表示闰月   
  •    private   int  chineseDate;  
  •    private   int  sectionalTerm;  
  •    private   int  principleTerm;  
  •    private   static   char [] daysInGregorianMonth =  
  •       {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 };  
  •    private   static  String[] stemNames =  
  •       {"甲" , "乙" , "丙" , "丁" , "戊" , "己" , "庚" , "辛" , "壬" , "癸" };  
  •    private   static  String[] branchNames =  
  •       {"子" , "丑" , "寅" , "卯" , "辰" , "巳" , "午" , "未" , "申" , "酉" , "戌" , "亥" };  
  •    private   static  String[] animalNames =  
  •       {"鼠" , "牛" , "虎" , "兔" , "龙" , "蛇" , "马" , "羊" , "猴" , "鸡" , "狗" , "猪" };  
  •    public   static   void  main(String[] arg) {  
  •       ChineseCalendarGB c = new  ChineseCalendarGB();  
  •       String cmd = "day" ;  
  •       int  y =  1901 ;  
  •       int  m =  1 ;  
  •       int  d =  1 ;  
  •       if  (arg.length> 0 ) cmd = arg[ 0 ];  
  •       if  (arg.length> 1 ) y = Integer.parseInt(arg[ 1 ]);  
  •       if  (arg.length> 2 ) m = Integer.parseInt(arg[ 2 ]);  
  •       if  (arg.length> 3 ) d = Integer.parseInt(arg[ 3 ]);  
  •       c.setGregorian(y,m,d);  
  •       c.computeChineseFields();  
  •       c.computeSolarTerms();  
  •       if  (cmd.equalsIgnoreCase( "year" )) {  
  •          String[] t = c.getYearTable();  
  •          for  ( int  i= 0 ; i<t.length; i++) System.out.println(t[i]);  
  •       } else   if  (cmd.equalsIgnoreCase( "month" )) {  
  •          String[] t = c.getMonthTable();  
  •          for  ( int  i= 0 ; i<t.length; i++) System.out.println(t[i]);  
  •       } else  {  
  •          System.out.println(c.toString());  
  •       }  
  •    }  
  •    public  ChineseCalendarGB() {  
  •       setGregorian(1901 , 1 , 1 );  
  •    }  
  •    public   void  setGregorian( int  y,  int  m,  int  d) {  
  •       gregorianYear = y;  
  •       gregorianMonth = m;  
  •       gregorianDate = d;  
  •       isGregorianLeap = isGregorianLeapYear(y);  
  •       dayOfYear = dayOfYear(y,m,d);  
  •       dayOfWeek = dayOfWeek(y,m,d);  
  •       chineseYear = 0 ;  
  •       chineseMonth = 0 ;  
  •       chineseDate = 0 ;  
  •       sectionalTerm = 0 ;  
  •       principleTerm = 0 ;  
  •    }  
  •    public   static   boolean  isGregorianLeapYear( int  year) {  
  •       boolean  isLeap =  false ;  
  •       if  (year% 4 == 0 ) isLeap =  true ;  
  •       if  (year% 100 == 0 ) isLeap =  false ;  
  •       if  (year% 400 == 0 ) isLeap =  true ;  
  •       return  isLeap;  
  •    }  
  •    public   static   int  daysInGregorianMonth( int  y,  int  m) {  
  •       int  d = daysInGregorianMonth[m- 1 ];  
  •       if  (m== 2  && isGregorianLeapYear(y)) d++;  // 公历闰年二月多一天   
  •       return  d;  
  •    }  
  •    public   static   int  dayOfYear( int  y,  int  m,  int  d) {  
  •       int  c =  0 ;  
  •       for  ( int  i= 1 ; i<m; i++) {  
  •          c = c + daysInGregorianMonth(y,i);  
  •       }  
  •       c = c + d;  
  •       return  c;       
  •    }  
  •    public   static   int  dayOfWeek( int  y,  int  m,  int  d) {  
  •       int  w =  1 ;  // 公历一年一月一日是星期一,所以起始值为星期日   
  •       y = (y-1 )% 400  +  1 ;  // 公历星期值分部 400 年循环一次   
  •       int  ly = (y- 1 )/ 4 ;  // 闰年次数   
  •       ly = ly - (y-1 )/ 100 ;  
  •       ly = ly + (y-1 )/ 400 ;  
  •       int  ry = y -  1  - ly;  // 常年次数   
  •       w = w + ry; // 常年星期值增一   
  •       w = w + 2 *ly;  // 闰年星期值增二   
  •       w = w + dayOfYear(y,m,d);  
  •       w = (w-1 )% 7  +  1 ;  
  •       return  w;  
  •    }  
  •    private   static   char [] chineseMonths = {  
  •    // 农历月份大小压缩表,两个字节表示一年。两个字节共十六个二进制位数,   
  •    // 前四个位数表示闰月月份,后十二个位数表示十二个农历月份的大小。   
  •    0x00 , 0x04 , 0xad , 0x08 , 0x5a , 0x01 , 0xd5 , 0x54 , 0xb4 , 0x09 , 0x64 , 0x05 , 0x59 , 0x45 ,  
  •    0x95 , 0x0a , 0xa6 , 0x04 , 0x55 , 0x24 , 0xad , 0x08 , 0x5a , 0x62 , 0xda , 0x04 , 0xb4 , 0x05 ,  
  •    0xb4 , 0x55 , 0x52 , 0x0d , 0x94 , 0x0a , 0x4a , 0x2a , 0x56 , 0x02 , 0x6d , 0x71 , 0x6d , 0x01 ,  
  •    0xda , 0x02 , 0xd2 , 0x52 , 0xa9 , 0x05 , 0x49 , 0x0d , 0x2a , 0x45 , 0x2b , 0x09 , 0x56 , 0x01 ,  
  •    0xb5 , 0x20 , 0x6d , 0x01 , 0x59 , 0x69 , 0xd4 , 0x0a , 0xa8 , 0x05 , 0xa9 , 0x56 , 0xa5 , 0x04 ,  
  •    0x2b , 0x09 , 0x9e , 0x38 , 0xb6 , 0x08 , 0xec , 0x74 , 0x6c , 0x05 , 0xd4 , 0x0a , 0xe4 , 0x6a ,  
  •    0x52 , 0x05 , 0x95 , 0x0a , 0x5a , 0x42 , 0x5b , 0x04 , 0xb6 , 0x04 , 0xb4 , 0x22 , 0x6a , 0x05 ,  
  •    0x52 , 0x75 , 0xc9 , 0x0a , 0x52 , 0x05 , 0x35 , 0x55 , 0x4d , 0x0a , 0x5a , 0x02 , 0x5d , 0x31 ,  
  •    0xb5 , 0x02 , 0x6a , 0x8a , 0x68 , 0x05 , 0xa9 , 0x0a , 0x8a , 0x6a , 0x2a , 0x05 , 0x2d , 0x09 ,  
  •    0xaa , 0x48 , 0x5a , 0x01 , 0xb5 , 0x09 , 0xb0 , 0x39 , 0x64 , 0x05 , 0x25 , 0x75 , 0x95 , 0x0a ,  
  •    0x96 , 0x04 , 0x4d , 0x54 , 0xad , 0x04 , 0xda , 0x04 , 0xd4 , 0x44 , 0xb4 , 0x05 , 0x54 , 0x85 ,  
  •    0x52 , 0x0d , 0x92 , 0x0a , 0x56 , 0x6a , 0x56 , 0x02 , 0x6d , 0x02 , 0x6a , 0x41 , 0xda , 0x02 ,  
  •    0xb2 , 0xa1 , 0xa9 , 0x05 , 0x49 , 0x0d , 0x0a , 0x6d , 0x2a , 0x09 , 0x56 , 0x01 , 0xad , 0x50 ,  
  •    0x6d , 0x01 , 0xd9 , 0x02 , 0xd1 , 0x3a , 0xa8 , 0x05 , 0x29 , 0x85 , 0xa5 , 0x0c , 0x2a , 0x09 ,  
  •    0x96 , 0x54 , 0xb6 , 0x08 , 0x6c , 0x09 , 0x64 , 0x45 , 0xd4 , 0x0a , 0xa4 , 0x05 , 0x51 , 0x25 ,  
  •    0x95 , 0x0a , 0x2a , 0x72 , 0x5b , 0x04 , 0xb6 , 0x04 , 0xac , 0x52 , 0x6a , 0x05 , 0xd2 , 0x0a ,  
  •    0xa2 , 0x4a , 0x4a , 0x05 , 0x55 , 0x94 , 0x2d , 0x0a , 0x5a , 0x02 , 0x75 , 0x61 , 0xb5 , 0x02 ,  
  •    0x6a , 0x03 , 0x61 , 0x45 , 0xa9 , 0x0a , 0x4a , 0x05 , 0x25 , 0x25 , 0x2d , 0x09 , 0x9a , 0x68 ,  
  •    0xda , 0x08 , 0xb4 , 0x09 , 0xa8 , 0x59 , 0x54 , 0x03 , 0xa5 , 0x0a , 0x91 , 0x3a , 0x96 , 0x04 ,  
  •    0xad , 0xb0 , 0xad , 0x04 , 0xda , 0x04 , 0xf4 , 0x62 , 0xb4 , 0x05 , 0x54 , 0x0b , 0x44 , 0x5d ,  
  •    0x52 , 0x0a , 0x95 , 0x04 , 0x55 , 0x22 , 0x6d , 0x02 , 0x5a , 0x71 , 0xda , 0x02 , 0xaa , 0x05 ,  
  •    0xb2 , 0x55 , 0x49 , 0x0b , 0x4a , 0x0a , 0x2d , 0x39 , 0x36 , 0x01 , 0x6d , 0x80 , 0x6d , 0x01 ,  
  •    0xd9 , 0x02 , 0xe9 , 0x6a , 0xa8 , 0x05 , 0x29 , 0x0b , 0x9a , 0x4c , 0xaa , 0x08 , 0xb6 , 0x08 ,  
  •    0xb4 , 0x38 , 0x6c , 0x09 , 0x54 , 0x75 , 0xd4 , 0x0a , 0xa4 , 0x05 , 0x45 , 0x55 , 0x95 , 0x0a ,  
  •    0x9a , 0x04 , 0x55 , 0x44 , 0xb5 , 0x04 , 0x6a , 0x82 , 0x6a , 0x05 , 0xd2 , 0x0a , 0x92 , 0x6a ,  
  •    0x4a , 0x05 , 0x55 , 0x0a , 0x2a , 0x4a , 0x5a , 0x02 , 0xb5 , 0x02 , 0xb2 , 0x31 , 0x69 , 0x03 ,  
  •    0x31 , 0x73 , 0xa9 , 0x0a , 0x4a , 0x05 , 0x2d , 0x55 , 0x2d , 0x09 , 0x5a , 0x01 , 0xd5 , 0x48 ,  
  •    0xb4 , 0x09 , 0x68 , 0x89 , 0x54 , 0x0b , 0xa4 , 0x0a , 0xa5 , 0x6a , 0x95 , 0x04 , 0xad , 0x08 ,  
  •    0x6a , 0x44 , 0xda , 0x04 , 0x74 , 0x05 , 0xb0 , 0x25 , 0x54 , 0x03   
  •    };  
  •    // 初始日,公历农历对应日期:   
  •    // 公历 1901 年 1 月 1 日,对应农历 4598 年 11 月 11 日   
  •    private   static   int  baseYear =  1901 ;  
  •    private   static   int  baseMonth =  1 ;  
  •    private   static   int  baseDate =  1 ;  
  •    private   static   int  baseIndex =  0 ;  
  •    private   static   int  baseChineseYear =  4598 - 1 ;  
  •    private   static   int  baseChineseMonth =  11 ;  
  •    private   static   int  baseChineseDate =  11 ;  
  •    public   int  computeChineseFields() {  
  •       if  (gregorianYear< 1901  || gregorianYear> 2100 )  return   1 ;  
  •       int  startYear = baseYear;  
  •       int  startMonth = baseMonth;  
  •       int  startDate = baseDate;       
  •       chineseYear = baseChineseYear;  
  •       chineseMonth = baseChineseMonth;  
  •       chineseDate = baseChineseDate;  
  •       // 第二个对应日,用以提高计算效率   
  •       // 公历 2000 年 1 月 1 日,对应农历 4697 年 11 月 25 日   
  •       if  (gregorianYear >=  2000 ) {  
  •          startYear = baseYear + 99 ;  
  •          startMonth = 1 ;  
  •          startDate = 1 ;  
  •          chineseYear = baseChineseYear + 99 ;  
  •          chineseMonth = 11 ;  
  •          chineseDate = 25 ;  
  •       }  
  •       int  daysDiff =  0 ;  
  •       for  ( int  i=startYear; i<gregorianYear; i++) {  
  •          daysDiff += 365 ;  
  •          if  (isGregorianLeapYear(i)) daysDiff +=  1 ;  // leap year   
  •       }  
  •       for  ( int  i=startMonth; i<gregorianMonth; i++) {  
  •          daysDiff += daysInGregorianMonth(gregorianYear,i);  
  •       }  
  •       daysDiff += gregorianDate - startDate;  
  •        
  •       chineseDate += daysDiff;  
  •       int  lastDate = daysInChineseMonth(chineseYear, chineseMonth);  
  •       int  nextMonth = nextChineseMonth(chineseYear, chineseMonth);  
  •       while  (chineseDate>lastDate) {  
  •          if  (Math.abs(nextMonth)<Math.abs(chineseMonth)) chineseYear++;  
  •          chineseMonth = nextMonth;  
  •          chineseDate -= lastDate;  
  •          lastDate = daysInChineseMonth(chineseYear, chineseMonth);  
  •          nextMonth = nextChineseMonth(chineseYear, chineseMonth);  
  •       }  
  •       return   0 ;  
  •    }  
  •    private   static   int [] bigLeapMonthYears = {  
  •       // 大闰月的闰年年份   
  •         6 ,  14 ,  19 ,  25 ,  33 ,  36 ,  38 ,  41 ,  44 ,  52 ,  
  •        55 ,  79 , 117 , 136 , 147 , 150 , 155 , 158 , 185 , 193   
  •       };  
  •    public   static   int  daysInChineseMonth( int  y,  int  m) {  
  •       // 注意:闰月 m < 0   
  •       int  index = y - baseChineseYear + baseIndex;  
  •       int  v =  0 ;  
  •       int  l =  0 ;  
  •       int  d =  30 ;  
  •       if  ( 1 <=m && m<= 8 ) {  
  •          v = chineseMonths[2 *index];  
  •          l = m - 1 ;  
  •          if  ( ((v>>l)& 0x01 )== 1  ) d =  29 ;  
  •       } else   if  ( 9 <=m && m<= 12 ) {  
  •          v = chineseMonths[2 *index+ 1 ];  
  •          l = m - 9 ;  
  •          if  ( ((v>>l)& 0x01 )== 1  ) d =  29 ;  
  •       } else  {  
  •          v = chineseMonths[2 *index+ 1 ];  
  •          v = (v>>4 )& 0x0F ;  
  •          if  (v!=Math.abs(m)) {  
  •             d = 0 ;  
  •          } else  {  
  •             d = 29 ;  
  •             for  ( int  i= 0 ; i<bigLeapMonthYears.length; i++) {  
  •                if  (bigLeapMonthYears[i]==index) {  
  •                   d = 30 ;  
  •                   break ;  
  •                }  
  •             }  
  •          }  
  •       }  
  •       return  d;  
  •    }  
  •    public   static   int  nextChineseMonth( int  y,  int  m) {  
  •       int  n = Math.abs(m) +  1 ;  
  •       if  (m> 0 ) {  
  •          int  index = y - baseChineseYear + baseIndex;  
  •          int  v = chineseMonths[ 2 *index+ 1 ];  
  •          v = (v>>4 )& 0x0F ;  
  •          if  (v==m) n = -m;  
  •       }  
  •       if  (n== 13 ) n =  1 ;  
  •       return  n;  
  •    }  
  •    private   static   char [][] sectionalTermMap = {  
  •    {7 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 5 , 6 , 6 , 6 , 5 , 5 , 6 , 6 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 4 , 5 , 5 },   
  •    {5 , 4 , 5 , 5 , 5 , 4 , 4 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 4 , 4 , 4 , 3 , 3 , 4 , 4 , 3 , 3 , 3 },   
  •    {6 , 6 , 6 , 7 , 6 , 6 , 6 , 6 , 5 , 6 , 6 , 6 , 5 , 5 , 6 , 6 , 5 , 5 , 5 , 6 , 5 , 5 , 5 , 5 , 4 , 5 , 5 , 5 , 5 },  
  •    {5 , 5 , 6 , 6 , 5 , 5 , 5 , 6 , 5 , 5 , 5 , 5 , 4 , 5 , 5 , 5 , 4 , 4 , 5 , 5 , 4 , 4 , 4 , 5 , 4 , 4 , 4 , 4 , 5 },  
  •    {6 , 6 , 6 , 7 , 6 , 6 , 6 , 6 , 5 , 6 , 6 , 6 , 5 , 5 , 6 , 6 , 5 , 5 , 5 , 6 , 5 , 5 , 5 , 5 , 4 , 5 , 5 , 5 , 5 },  
  •    {6 , 6 , 7 , 7 , 6 , 6 , 6 , 7 , 6 , 6 , 6 , 6 , 5 , 6 , 6 , 6 , 5 , 5 , 6 , 6 , 5 , 5 , 5 , 6 , 5 , 5 , 5 , 5 , 4 , 5 , 5 , 5 , 5 },  
  •    {7 , 8 , 8 , 8 , 7 , 7 , 8 , 8 , 7 , 7 , 7 , 8 , 7 , 7 , 7 , 7 , 6 , 7 , 7 , 7 , 6 , 6 , 7 , 7 , 6 , 6 , 6 , 7 , 7 },  
  •    {8 , 8 , 8 , 9 , 8 , 8 , 8 , 8 , 7 , 8 , 8 , 8 , 7 , 7 , 8 , 8 , 7 , 7 , 7 , 8 , 7 , 7 , 7 , 7 , 6 , 7 , 7 , 7 , 6 , 6 , 7 , 7 , 7 },  
  •    {8 , 8 , 8 , 9 , 8 , 8 , 8 , 8 , 7 , 8
  • 相关
    • 1 中国阴历算法java实现
    • 2 阴历算法
    • 3 阴历阴历阳历阴历
    • 4 求公历转换为阴历算法解决办法
    • 5 JS阴历
    移动开发-热门移动开发-最新移动开发-其它
    • 1 十分难缠的signal 11 (SIGSEGV)
    • 2 Can't create handler inside thread that has not called Looper.prepare() 错误有关问题
    • 3 Dex Loader Unable to execute Multiple dex files define解决办法
    • 4 解决 Google Play下载施用 "Google Play Store 已停止运行&quot
    • 5 WAP网页获得用户的手机号码
    • 6 如何判断Activity是否在运行
    • 7 SlidingMenu+ViewPager兑现侧滑菜单效果
    • 8 makeKeyAndVisible的功用
    • 9 关于Unable to execute dex: Java heap space 解决方法
    • 10 RelativeLayout设置居中对齐有关问题
    • 1 播发声音文件AVAudioPlayer
    • 2 改变银屏显示方式已经加载图片
    • 3 2013-十-31 TCP/IP 协议簇
    • 4 Java I/零 总体框架图
    • 5 拿碗的铠甲勇者
    • 6 女友可能出轨 想知道在QQ和别人的聊天记录
    • 7 objective C中的字符串(3)
    • 8 java.lang.ClassNotFoundException: Didn't find class "Activity" on path: /da
    • 9 LG Optimus G Pro 相干
    • 10 怎么创建对话框
    • 1 视图切换的形式
    • 2 Tiledmap编辑操作技巧
    • 3 实现默认文字统制的textview
    • 4 用 lipo 下令裁剪出需要的 architecture
    • 5 power键跟音量键组合实现截图功能
    • 6 Andriod耗时操作的处置(音乐播放器欢迎界面)
    • 7 疑惑为什么报错了
    • 8 深入viewgroup.onintercepttouchevent1点
    • 9 MGTemplateEngine模版发动机
    • 10 BroadcastReceiver要领
    • 上一篇: ListView 分段展示
    • 下一篇: button selector 式样

        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3