智慧北京05_上拉刷新_webView_sharedSDK_图片轮播_组图模块

1.1 自定义进度条java

建立自定义的xml文件android

外层根节点是一个rotate无限旋转的动画web

内层节点是一个shapejson

属性圆环ring,内半径比:innerRadius;外半径(圆环厚度)thickness,api

在布局文件progressBar属性:indeterminateDrawable执行样式文件浏览器

 

1.2 上拉加载更多缓存

①建立一个脚布局服务器

 

 

②在自定义控件中初始化脚布局微信

this.addFootView(View)网络

脚布局简单一点,不用那么多动画

设置padding 隐藏脚布局

 

③实现滑动状态监听器,重写方法

onScrollStateChanged()滑动状态发生改变的方法里

当前若是是空闲状态scrollState == SCROLL_STATE_IDIE

注意:这里类虽然实现了回调接口,但仍是须要调用setOnScrollListener(this)方法

当处于空闲状态的时候,若是当前最后一个可见条目是最后一个getCount()-1

显示脚布局

setSelection(getCount()-1)//跳到实际的最后一个条目

 

额外:须要一个标记,防止用户重复加载更多

 

④回调接口中添加一个加载更多的方法,在触发加载更多的位置加载更多

 

⑤经过网络数据中表明加载更多(more)url,表明下一页数据的连接

根据实际状况判断more是否为空

若是为空,就置为null

在回调方法里,判断它是否为nul,若是为null提示用户没有更多数据了

若是不为null,建立一个方法,代码基本上等同于下拉刷新代码,不过不须要缓存,由于缓存的实际上只须要一页就够了

 

问题1:直接解析数据以后,并非追加,而是覆盖了第一页

解决1:解析数据的时候加一个变量,判断是否须要加载更多

须要加载更多,就把新的新闻列表添加到旧的集合中

 

细节1:不管有没有更多数据,都应该隐藏脚布局

解决2:改造调用加载完毕的方法,调用此方法,就能够影藏脚布局

2,标记已读未读

2.1 设置ListView点击事件

注意:这里的头布局是会占位置的,实际第一个点击条目位置是:头布局个数+0

而集合的位置依然是从0开始

因此position须要修正为position-头布局个数(listView.getHeaderViewCount());

 

2.2 标记

经过json数据分析,每一条新闻都有一个惟一标示:id

能够把点击过的新闻id保存在sp

经过一个键值对判断是否已经点击过

read_ids(,任意名):id1,id2,id3(,”,”符号拼接)

注意:默认值不能是null,由于在第一次添加后,null+””>>>>>>>>字符串“null”

 

问题1:重复添加的可能

解决1:判断字符串中是否包含(contains)了当前id,若是包含了就不添加

 

拿到被点击的文本控件,经过参数View(被点击的条目)找到文本控件,修改颜色.

(这样作算是局部刷新,也能够经过适配器重绘notifyDataSetChanged()全局刷新)

 

在适配器中要回显点击状态

 

3,建立新闻详情页

 

 

当一个页面与上一个页面几乎没有任何关系(样式,功能等差距明显)Activity

注意:Activity是全屏的,不能作内嵌的控件

 

参考名:NewsDetailActivity

①布局文件

标题栏,能够引入前面的标题栏进行修改

 

 

若是是对标题栏进行修改,通常状况下隐藏掉,在新闻详情页中找到并进行显示

②页面跳转

点击条目以后,mAcitivity.startActivity(intent)//跳转页面

 

WebView控件使用

在布局中添加这个控件

在类中找到它

mWebView.loadUrl(url);//加载url,会平铺整个页面

mWebView.getSetting()//获取全部设置功能

setting.setBuiltInZommControls(true)//显示缩放按钮

 

细节1:但愿双击放大:

解决1:setting.setUseWideViewPort(true);

 

细节2:WebView默认是禁止js的  javaScript

解决2:setting:.setJavaScriptEnabled(true);

 

细节3:各类点击跳转浏览器,用户体验很差,但愿通常状况在都在本页面进行处理

解决3:mWebView.setWebViewClient(new WebViewClient(){//设置web控件监听

 

onPageStarted()//页面开始加载调用

 

onPageFinished()//网页加载结束

 

shouldOverrideUrlLoding()//全部的跳转连接都会走此方法

经过参数view.loadUrl(url)//在跳转页面前,强制在当前页面加载

return true;//去掉super.xxx

})

加载的时候显示进度条,在布局中webView上压一个进度条,控件监听方法中限定生命周期.

 

细节4:但愿返回上一页

解决4:经过按钮,设置跳转

          mWebView.goBack()//跳到上个页面

  mWebView.goForward()//跳到下个页面

 

细节5:但愿知道网页加载进度

解决5:mWebView.setWebChromeClient(new WebChromeClient(){

onProgressChanged()// 参数int,表明进度值

onReceivedTitle()//参数String,表明网页标题

});

 

4.WebView使用场景:

须要使用网页的部分

不少的客户端都是用WebView进行加载

经过设置>>开发者选项>>显示布局边界,能够判断一个app是用的WebView仍是系统原生的控件制做的(Html5很强大,能够模拟出相似android控件同样的效果)

实际开发中,网页由服务器端人员开发的.WebView加载的.

 

5,加载新闻页面,设置字体大小

①加载新闻页面:经过intent携带url过去

加载完了以后发现没有缩放按钮和点击缩放

是由于这是Web网页,专门针对手机屏幕进行适配的

 

②设置按钮点击事件

返回按钮:直接finish();关闭当前页面就是

 

字体按钮:弹出一个对话框(alertDialog),让用户选择字体.

AlertDialog.builder builder

builder.setSingleChoiceItems(items,checkedItem.listener);

Items,单选框显示的文本

checkedItem,默认选中的条目

listener监听器

 

而后再设置确认,取消按钮(取消按钮的话,能够不设置监听器,它会本身取消)

 

用户点了肯定以后,根据选择的字体,修改WebView的字体大小

 

注意:这里选中的条目,并非肯定按钮传递的参数,而是设置单选条目监听回调的参数.

建立一个变量记录下它(临时选中的)

最后在确认按钮中,判断临时选中的按钮,用另外一个变量记录(确认选中)下它

 

修改字体大小:setting.setTextSize(TextSize.LARGEST);//枚举的方式设置,api18后被废弃

setting.setTextZoom(int )//经过int值设置,api18之后设置

 

细节1:不该该把默认选中条目写死,写成确认选中的变量值(默认2)

 

细节2:记录到sp,选中的字体

 

6,ShaderSdk的使用,分享到其它平台(微信,QQ,微博等)

须要注册,相似百度SDK的使用

帮助文档有很详细步骤

应用程序名是指在编译工具中显示的名称(英文字母),不是label中指定的名称

生成的文件夹直接覆盖(记得备份一下)

配置清单文件(重复的权限能够去掉)

 

开放平台通常都有本身的SDK支持(微信,微博,QQ)

 

修改分享时的样式.oks.setTheme(OneKeyShareTheme.SKYBLUE);

 

7,头条新闻自动轮播

7.1在新闻页签详情页pager,建立handler对象

 

这里初始化handler在加载完数据以后初始化(记得判断是否为空,为空才发消息,保证自动轮播逻辑只执行一次)

mhandler.sendEmptyMessageDelayed(0,3000)//发送一个延时三秒的消息

 

handler,拿到当前页面,而后进行++,而后再mViewPager.setCurrentItem(i);

handler里面,继续发一个空消息//造成一个循环

 

若是currentItem等于最大索引,就让它归0

 

 

7.2 用户按住轮播图的时候,再也不继续轮播

停下handler消息事件.

mViewPager.setOnTouchListener()//设置触摸事件

 

当用户按下的时候,mHandler.removeCallBacksAndMessage(null);//清空全部消息

mHandler.post(new Runable(){ //另外一种方式,不用重写handlerMessage方法,在里面作消息的处理就能够了.(更新主界面之类)

Run(){} //在主线程中运行

});

 

当手指抬起的时候,继续启动广告,发送一个一样的延迟消息

 

可是当用户在按下以后(直接滑动ListView,致使抬起事件没法响应),不走action_up,而是走ACTION_CANCEL.

在这里面也从新发送一次延迟消息

 

8,组图模块,ListView显示组图数据

 

 

 

①实际上布局的时候,是一个ListView和一个GridView覆盖

②在对应的组图pager代码中找到它

注意连接,与以前的是不同的,再在URL类中增长一个URL

使用xutil访问网络,加缓存,度缓存,打印错误信息等等

③解析网络返回的JSON,建立JAVABean

ListView item布局

 

  

看起来像一张卡片,设置margin属性,背景图片设置

图片宽高要写固定,否则布局会乱,属性scaleType=”centerCrop”

⑤经过Json串设置ListView适配器(BitmapUtils加载网络图片)

 

8.2 GridView切换显示

①在标题栏上继续增长一个按钮,切换显示ListViewGridView

在设置菜单详情页的方法中,若是是组图详情页,就显示切换按钮,不然就隐藏

 

控件的传递:在建立组图详情页的时候,就把控件传递过来

 

点击事件,切换显示ListViewGridView

 

GridViewadapterListViewAdapter是能够共用的

相关文章
相关标签/搜索