coding源码分析:实现篇
来源:互联网 发布:wps办公软件mac版免费 编辑:程序博客网 时间:2024/05/11 09:03
·入口相关
splash广告页更换实现
第一次进来用先取以前下载的广告页面本次使用,进入首页之后下载会下载,供下次使用。
这里的实现还是挺好的,把相关代码提取封装到了LoginBackground类中,对外提供了下载和获取缓存图片的方法接口。开始我在想是否可以设计成单例,但是想一想后发现其实这里并不需要单例,《重构与模式》中说过,在实现一个单例之前,需要仔细思考。如果遇到一个本不应该被实现为单例的单例,不要犹豫,内联他。这里既是如此。
侧拉
<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".MainActivity" > <!-- Your normal content view --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" /> <!--app:theme="@style/NoIconActionbar"--> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> <fragment android:id="@+id/navigation_drawer" android:name="net.coding.program.NavigationDrawerFragment_" android:layout_width="280dp" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" tools:layout="@layout/fragment_navigation_drawer" /></android.support.v4.widget.DrawerLayout>
看这个布局,就可明白,侧拉采用的是v4包下的DrawerLayout,左侧菜单栏是一个fragment:NavigationDrawerFragment,右侧内容区域是Toolbar+ container(framelayout)。
在点击的时候,onNavigationDrawerItemSelected,会将对应的container动态替换对应的fragment。UsersListFragment、TaskFragment、ProjectFragment、SettingFragment。
连续点击两次退出
@Override public void onBackPressed() { exitApp(); } private void exitApp() { if ((System.currentTimeMillis() - exitTime) > 2000) { showButtomToast("再按一次退出Coding"); exitTime = System.currentTimeMillis(); } else { finish(); } }
·我的项目模块ProjectFragment
过滤及项目模块的交替显示
采用的是个NoHorizontalScrollViewPager,通过显示不同的子view来实现切换且流畅的效果。NoHorizontalScrollViewPager里放的是fragment集合,MenuProjectFragment、ProjectOtherFragment、ProjectListFragment。
创建项目ProjectCreateActivity
我看到这个view的时候,以为作者使用的是自定义view,其实作者使用的是checkbox
<CheckBox android:id="@+id/generateReadme" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="@drawable/push_checkbox" android:button="@null" />
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:drawable="@drawable/push_checkbox_on" /> <item android:drawable="@drawable/push_checkbox_off" /></selector>
搜索模块SearchProjectActivity
布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/color_EEEEEE" android:orientation="vertical" tools:context="net.coding.program.project.SearchProjectActivity"> <include layout="@layout/activity_search_project_actionbar" /> <net.coding.program.common.PagerSlidingTabStrip android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="48dip" android:background="@android:color/transparent" android:visibility="gone" /> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone" /> <ListView android:id="@+id/emptyListView" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="@color/transparent" android:clipToPadding="false" android:divider="@color/color_DDDDDD" android:dividerHeight="0.5dp" android:drawSelectorOnTop="true" android:listSelector="@color/transparent" android:overScrollMode="never" android:footerDividersEnabled="false" android:scrollbarStyle="outsideOverlay" android:scrollbars="none" android:visibility="gone" /></LinearLayout>
输入框、PagerSlidingTabStrip、ViewPager、ListView
ListView用于存放搜索历史
ViewPager中存放不同的fragment
搜索的缓存实现:SearchCache类,单例实现,底层保存采用的是SharedPreferences。
扫一扫:二维码扫码页面QRScanActivity
·项目首页模块PublicProjectHomeFragment
ExpandableStickyListHeadersListView+SwipeRefreshLayout
讨论—讨论的筛选框TopicListFragment
DropdownButton\DropdownListView组成
讨论-发送时的全屏dialog
v7包下的alertdialog
代码-markdown的支持
是webview
代码-代码展示解析,且支持放大和缩小
是webview
·新建任务模块TaskAddActivity
任务-新建:多种颜色的标签
FlowLabelLayout,扩充自FlowLayout
·冒泡模块
切换
MaopaoListFragment,传递不同的参数,显示不同的页面
点击超链接的webview页面做的支持
WebActivity
冒泡UI:支持多种颜色和超链接,支持表情,点赞效果,评论是做为?MaopaoDetailActivity
内容不是使用的是webview,URLSpanNoUnderline用来解析 url 以跳转到不同的界面
点赞动画
MaopaoLikeAnimation.playAnimation(good, v);
分享弹窗
CustomShareBoard,继承自PopupWindow
listview自动加载的动画效果:移动上去
JazzyListView
·消息页面
聊天页面
MessageListActivity
在当前页面做了一个轮询,实现类似即时通讯的效果
输入框部分采用自定义view做了封装
相册页面
PhotoPickActivity、看大图ImagePagerFragment
联系人页面
UsersListActivity
采用第三方IndexableListView
·个人中心
UserDetailActivity
·设置模块
清除缓存,这个缓存包含了哪些部分
File[] cacheDir = getAllCacheDir(); for (File item : cacheDir) { deleteFiles(item); } showMiddleToast("清除缓存成功"); updateCacheSize();File[] getAllCacheDir() { return new File[] { getActivity().getCacheDir(), getActivity().getExternalCacheDir() }; }
计算:
void updateCacheSize() { File[] cacheDir = getAllCacheDir(); long size = 0; for (File dir : cacheDir) { size += getFileSize(dir); } String sizeString = String.format("%.2f MB", (double) size / 1024 /1024); dispayCacheSize(sizeString); }
删除缓存的时候只考虑了系统默认的缓存位置。
可参考资料
Coding Android客户端用到的一些开源库
https://blog.coding.net/blog/android-open-source-library
https://coding.net/u/coding/p/Coding-Android/git
- coding源码分析:实现篇
- LevelDB源码分析之一:coding
- coding源码分析:架构篇(待再更新)
- coding note-源码搜索
- oschina源码分析:实现篇(草稿)
- epoll源码实现分析
- epoll源码实现分析
- epoll源码实现分析
- Asynctask实现源码分析
- BadgeView实现源码分析
- Iterator实现源码分析
- 源码分析:SharedPreferences实现
- Dubbo实现源码分析
- ViewPager实现源码分析
- Retrofit2实现源码分析
- 源码分析:ConcurrentHashMap实现分析
- Spring源码分析:实现AOP- -
- 摄像头驱动实现源码分析
- coding源码分析:架构篇(待再更新)
- 关于pthread_cond_timewait超时之后获取mutex的处理
- JsonObject null 的神坑
- 集线器,网桥,交换机
- 2016 ACM/ICPC Dalian Online-1009 Sparse Graph
- coding源码分析:实现篇
- rac两节点,一个库起不来,其他集群状态正常。(ORA-01078 ORA-01565 ORA-17503 ORA-01017)
- 代码管理版本控制
- 请朋友办公事,请主动出价!
- [电影]《指环王》新老三部曲完全赏析(补充)
- css3学习day1
- 结构体的一些形式理解
- 一些常用的提高效率的工具及常用命令(持续更新)
- GIT的使用