github 地址:https://github.com/mrlsm/newsClientSide
主要功能
- 进入有良好的动画效果
- 初始进入有新手引导界面
- 可以浏览新闻,一键分享
- 侧边栏,底部标题栏,多页面切换
- 消息推送等
新手引导界面
- 介绍
- 引导用户使用APP的大致应用介绍(只在第一次使用时显示)
- 实现
- 可滑动的界面VIewPager(填充介绍APP的图片)
- “开始体验”的Button按键
- 最后一个页面显示开始体验的按钮。
- 显示下方页面指示器的小圆点
- 动画实现旋转RotateAnimation,缩放ScaleAnimation,渐变AlphaAnimation效果,添加动画集合AnimationSet set并启动startAnimation(set)。
- 并在onAnimationEnd中判断动画是否结束,跳转页面,如果是第一次进入, 跳新手引导,否则跳主页面。
侧滑菜单
使用SlidingMenu API实现方法
SlidingMenu slidingMenu = getSlidingMenu();
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//全屏触摸
slidingMenu.setBehindOffset(200);//屏幕预留200像素宽度
侧滑菜单的内容
- 使用Xutils访问服务器Tomcat(使用开源框架Xutils)
- 可以自己创建Tomcat服务器,也可以找线上服务器url地址连接。
- 使用json文件保存页面所需数据(使用Gson解析数据)
- 分类信息封装,使用Gson解析时:逢{}创建对象,逢[]创建集合(ArrayList),所有字段名称要和json返回字段高度一致(字段匹配)
- 缓存json文件(key = url,value = json内容,保存在本地)
- 侧边栏使用json文件的数据表示相关信息
- 点击侧边栏listview后,收起侧边栏。使用slidingmenu.toggle()方法(调用可以使侧边栏状态改变)
- 侧边栏点击后,应该修改新闻的内容
- 菜单的详细页的展示(TextView)
- 多次对象的引用来提取主页面的FrameLayout的布局。
主页面的大致构造
- 底部标签栏
- 底部为RadioGroup+RadioButton来制作几个点击可变色的btn。
- 标签页面
- ViewPager(与底部标签栏相结合,所以禁止左右滑动)。
- 标题栏
- 几个页面设置类似的标题栏,可以提取为style,改变标题文字即可。
- 底部标签栏和标签页面一一对应
- 设置btn的点击事件,改变ViewPager相应界面
- ViewPager会默认自动加载下一页。(浪费性能,应该禁用,调用onPageSelected(int pos)方法在显示界面时在加载此界面的Data)。
- 首页和设置页要禁用侧边栏。
新闻页签页面
- 可滑动的ViewPager制作页签页面
- 初始化页签页面(通过Xutils读取json数据)
- 两个ViewPager嵌套了,使外层ViewPager不拦截滑动事件,重写父类的ViewPager的事件拦截方法onInterceptTouchEvent() return false//设置不拦截。
- 页签页面上方设置文字指示器
- 使用开源框架ViewPager Indicator,并将ViewPager和指示器绑定在一起
- 重写PagerAdapter的getPageTitle来设置页签页面的标题
- 在清单文件中修改背景style和文字style
- 页签滑动禁用侧边栏:调用dispatchTouchEvent方法,请求所有父类都不要拦截事件
- 设置页签页面第一页对侧边栏的调用,其他页签页面禁用侧边栏
- 页签页面设置点击按钮跳转下一页
- 添加ImageButton,设置点击事件,跳转下一页面
- 头条新闻内容的展示
- 头条新闻的轮流展示 ViewPager(第三个ViewPager的嵌套)
- httpUtils来请求json数据,Gson解析json数据传递给ViewPager展示
- 新闻图片的缓存(BitmapUtils)
- 请求新闻图片ViewPager不要被上一层的ViewPager类拦截,同理重写它的父类方法,但滑动到最后自动切换页签页面的下一页面,所以设置拦截第一个和最后一个新闻图片。
- 设置第一个和最后一个新闻图片的滑动事件。
- 更新头条新闻信息的标题。(解析json数据,设置为title标题)
- 设置头条新闻页面指示器(使用ViewPagerIndicator框架,重写指示器的style,并关联新闻图片信息,OnPageSelected(0)默认第一个被选中)
- 列表新闻展示
- bitmap图片的压缩和自动剪切centerCrop中心剪切
- 列表新闻的大体内容TextView和时间TextView
- 实现上下滑动使新闻移动
- 设置头条新闻ViewPager为列表新闻的头部局addHeaderView()
- 实现下拉刷新
- 下拉刷新的ListView
- 设置刷新的animation的动画效果,但结束时clearAnimation(),不然隐藏出现问题。并判断当前刷新状态,则不进入刷新,略过该方法。
- 设置回调方法来refresh数据,完成之后设置隐藏刷新的ListView。
- 添加刷新时间读取Date()类即可。
- 底部上滑加载
- 设置自定义进度条,表示下拉刷新。
- 判断是否为最后一个item并是否加载中,并添加数据。
- 设置标记已读与未读
- 设置字符串保存新闻id来标记已读。
新闻详细页
- 新闻标题栏
- 设置标题、返回、分享等btn。
- WebView全部内容
- WebView加载已知网页。
- 添加加载进度条。
- 字体设置
- ShareSDK官网设置分享(AppKey,jar包,按照官方文档设置即可)
- 上线APP就需要各个分享网站的认定,需要审核(略过)
新闻的组图模式
- ListView与GridView的相互替换
- JPush极光推送
- 推送消息(客户端被动接收服务器数据, 都可以用上消息推送技术)
整体的功能大概的实现了
总结一下项目大致、修复bug、适配以及其他相关问题
三级缓存
- 优先从内存中加载图片,速度快,不浪费流量
- HashMap存取(有内存泄漏可能)- 软引用 (2.3之后,垃圾回收更易回收软引用,弱引用)
- LruCache (将最近最少使用的对象回收掉) 建议使用(自己控制内存大小,避免溢出)
- 其次从本地(sdcard)加载图片, 速度快, 不浪费流量
- 创建文件保存数据(网络下载后,本地缓存)
- 最后从网络下载图片, 速度慢, 浪费流量
- AsyncTask网络缓存,通过url读取传递数据。
- AsyncTask< , , >三个泛型:
- doInBackground(正在加载,子线程运行,可以直接异步请求)里面的参数类型。
- onProgressUpdate(更新加载,主线程)里面的参数类型。
- onPostExecute(加载完成,主线程)里面的参数也是doInBackground的返回类型。
屏幕适配
养成良好的开发习惯: 多用dp,sp,不用px; 多用线性布局和相对布局, 不用绝对布局; 代码中如果必须设置像素的话, 将dp转为px进行设置。
- 图片适配
- 布局适配
- 尺寸适配(常用)
- dp = px/设备密度
- 权重适配
- android:weightSum=”3
项目详情具体可见 github
谢谢观看!