Android项目之新闻客户端
- 主要功能(后续添加,完善)
- 进入有良好的动画效果
- 初始进入有新手引导界面
- 可以浏览新闻,一键分享
- 侧边栏,底部标题栏,多页面切换
- 消息推送等
新手引导界面
引导用户使用APP的大致应用介绍(只在第一次使用时显示)
- 实现
- 可滑动的界面VIewPager(填充介绍APP的图片)
- “开始体验”的Button按键
- 最后一个页面显示开始体验的按钮。
- 显示下方页面指示器的小圆点
- OnPageCHangelistener()来判断移动位置和距离。
- 计算两个圆点的距离
- 移动距离=第二个圆点left值 - 第一个圆点left值
- measure->layout(确定位置)->draw(activity的onCreate方法执行结束之后才会走此流程)
- mPointDis = llContainer.getChildAt(1).getLeft() - llContainer.getChildAt(0).getLeft();
- System.out.println(“圆点距离:” + mPointDis);
- 监听layout方法结束的事件,位置确定好之后再获取圆点间距
程序进入时闪屏页面
- 动画实现旋转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来标记已读。
当前整体UI布局
MainActivity
- leftMenuFragement(侧边栏菜单)
- SlidingMen框架(侧边栏框架)
- ListView(新闻主题分栏)
- ContentFragment(主页面)
- ViewPager(中心页面)
- HomePager(主页)
- NewsCenterPager(新闻中心-侧边栏点击进入的几个页面)
- NewsMenu(新闻菜单)
- ViewPagerIndicator框架(可滑动的文字指示器)
- ListView(各个新闻大体内容)
- ListView的下拉刷新(一般隐藏)
- ListView的头部局ViewPager(展示可滑动的头条新闻)
- ViewPagerIndicator框架(可滑动的图片指示器)
- 上下滑动的列表新闻ListView
- Bitmap新闻图片和该新闻大体介绍和时间TextView
- 底部上滑加载item
- 自定义旋转的进度条
- TopicMenu(主题新闻菜单)
- PhotoMenu(图片新闻菜单)
- InteractMenu(互动菜单)
- SettingPager(设置)
- RadioGroup(底部标题栏)
- RadioButton(底部按键)
未完待续。
———谢谢观看———