帮朋友搞一个Android计算器程序,为了偷懒,直接使用了源码里的计算器。

但偷懒归偷懒,其中的知识还是应该学习的。

好了,下面开始Calculator的浅析之旅

 

第一步,下载Calculator源码(具体参见博文http://blog.csdn.net/singleton1900/article/details/8434978)

git clone https://android.googlesource.com/platform/packages/apps/Calculator

 

第二步,纠错。

下载下来的源码导入到Eclipse中是有问题的。问题主要在于3处。

(1)缺少android-support-v4.jar包

(2)未使用随同源码一起下下来的Arity-2.1.2.jar包

(3)Android 目标api为2.2,低于最新源码的最低要求的4.0

好了,一一纠错。最终得到一份无错的代码。

为了避免将真机中的计算器替换掉,将包名替换为com.harlan.calculator2(注意布局文件中的也要替换)。

最终项目如图所示:

 

源码计算器效果图(仅以竖屏为例):

             

 

            

 

下面对源码中各java文件做一番简要的说明(仅以竖屏为例):

(1)Calculator:

   工程中唯一的Activity,与用户交互。采用一个垂直的线性布局,由3个主要部分组成:最上层的是一个包含有2个CalculatorEditText的CalculatorDisplay以及一个不可见的ImageButton,中间一层是一个FrameLayout,主要包含删除和清空两个重叠的ColorButton。最下面一层是一个控制面板CalculatorViewPager,也就是按键。

(2)CalculatorDisplay:

   ViewSwitcher的子类,主要用于实现分屏效果。

(3)CalculatorEditable:

   一个SpannableStringBuilder,也就是最显眼的用户输入的字符串,通过内部类Factory在CalculatorDisplay被调用。

(4)CalculatorEditText:

   一个EditText,主要实现了长按菜单事件(剪切,复制,粘贴)的功能。

(5)CalculatorViewPager:

   一个ViewPager,在Calculator中通过自定义的PagerAdapter将按键控制面板传进去展示。

(6)ColorButton:

   高级面板的按钮,按下之后,在CalculatorEditText增加符号后,面板会伴随着动画跳转到基本面板。

(7)EventListener:

   按键监听器,调用Logic中的方法进行分类处理,自己实现的功能主要是高级面板按钮按下后增加左括号并跳转至基础面板。

(8)History:

    主要存储了一个Vector数组用来存放HistoryEntry。

(9)HistoryAdapter:

     继承自BaseAdapter,展示历史记录的适配器。

(10)HistoryEntry:

     一个数据结构,历史记录类,展示在HistoryAdapter中,存储在History的Vector数组中。

(11)Logic:

      主要的逻辑处理类,具体实现了对整个应用的操作方法,包括不同按钮点击后的具体实现以及根据输入的字符串,识别操作符并根据优先级进行高精度运算。

(12)PanelSwitcher:

      一个FrameLayout,主要实现了面板切换时候的动画。

(13)Persist:

    用以存储最后一次计算器运行状态的辅助类,在Calculator中调用。

 

源码中的计算器附件:

    http://download.csdn.net/detail/singleton1900/4963245


PS:经过 ASHINE 童鞋提醒,源码需要导入arity.jar

导入后clean一下即可正常使用~

感谢ASHINE 童鞋~

 

 

更多相关文章

  1. Android(安卓)setContentView 源码解析
  2. Android(安卓)GPS源码分析总结
  3. 小米文件管理器源码
  4. Matrix源码分析之第一篇
  5. EventBus源码解析-总结篇
  6. Ubuntu14.04交叉编译i2c-tools
  7. Android系统启动流程源码分析
  8. [房贷计算器]-升级心得
  9. LiveData源码分析

随机推荐

  1. android 系统的开机启动流程源码解析(从li
  2. android中使用httpclient方法获得网页内
  3. android4.0.3修改源码永不锁屏
  4. Android音乐播放器制作(二 )点击歌曲实现播
  5. [Android] 获取WebView的页面标题(Title)
  6. WebView播放html5视频和全屏。
  7. Android完全关闭应用程序
  8. Android常用控件之GridView使用BaseAdapt
  9. 手机APP制作先选Android还是iOS,为什么?
  10. Android 读取系统信息