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)。
  • 首页和设置页要禁用侧边栏。

新闻页面的详细

  • 新闻页签页面
  1. 可滑动的ViewPager制作页签页面
  • 初始化页签页面(通过Xutils读取json数据)
  • 两个ViewPager嵌套了,使外层ViewPager不拦截滑动事件,重写父类的ViewPager的事件拦截方法onInterceptTouchEvent() return false//设置不拦截。
  1. 页签页面上方设置文字指示器
  • 使用开源框架ViewPager Indicator,并将ViewPager和指示器绑定在一起
  • 重写PagerAdapter的getPageTitle来设置页签页面的标题
  • 在清单文件中修改背景style和文字style
  • 页签滑动禁用侧边栏:调用dispatchTouchEvent方法,请求所有父类都不要拦截事件
  • 设置页签页面第一页对侧边栏的调用,其他页签页面禁用侧边栏
  1. 页签页面设置点击按钮跳转下一页
  • 添加ImageButton,设置点击事件,跳转下一页面
  1. 头条新闻内容的展示
  • 头条新闻的轮流展示 ViewPager(第三个ViewPager的嵌套)
  • httpUtils来请求json数据,Gson解析json数据传递给ViewPager展示
  • 新闻图片的缓存(BitmapUtils)
  • 请求新闻图片ViewPager不要被上一层的ViewPager类拦截,同理重写它的父类方法,但滑动到最后自动切换页签页面的下一页面,所以设置拦截第一个和最后一个新闻图片。
  • 设置第一个和最后一个新闻图片的滑动事件。
  • 更新头条新闻信息的标题。(解析json数据,设置为title标题)
  • 设置头条新闻页面指示器(使用ViewPagerIndicator框架,重写指示器的style,并关联新闻图片信息,OnPageSelected(0)默认第一个被选中)
  1. 列表新闻展示
  • bitmap图片的压缩和自动剪切centerCrop中心剪切
  • 列表新闻的大体内容TextView和时间TextView
  1. 实现上下滑动使新闻移动
  • 设置头条新闻ViewPager为列表新闻的头部局addHeaderView()
  1. 实现下拉刷新
  • 下拉刷新的ListView
  • 设置刷新的animation的动画效果,但结束时clearAnimation(),不然隐藏出现问题。并判断当前刷新状态,则不进入刷新,略过该方法。
  • 设置回调方法来refresh数据,完成之后设置隐藏刷新的ListView。
  • 添加刷新时间读取Date()类即可。
  1. 底部上滑加载
  • 设置自定义进度条,表示下拉刷新。
  • 判断是否为最后一个item并是否加载中,并添加数据。
  1. 设置标记已读与未读
  • 设置字符串保存新闻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(底部按键)

未完待续。

———谢谢观看———