Andoid - 开发实例(8):高仿Fuubo新浪微博客户端

来源:互联网 发布:龙霸网络电视手机5.5版 编辑:程序博客网 时间:2024/06/06 00:46
能完成这个实例,感谢Github上的开源的UI组件,本项目所用到的开源组件:
UI组件:ActionBarSherlockSlidingMenuPullToRefresh
其他框架:Afinal (使用这个框架做图片缓存, 能很好的解决OOM的问题),fastjson (解析json)
tip: 上面的包 google 百度都很容易找到
很多同学说下载的源码不能用,因为我项目用到了上面三个UI组件,源码里面是没有的,需要你们自己去github下载,集成进去。

首先声明,提供的源码完成度不高,只是简单的模仿了Fuubo主界面的UI,功能上也只做了首页的部分,Fuubo的SmartPanel 等等特性都没有做,勿喷。

简单解析下 Fuubo 的UI实现:
1. 最困惑的一点是Fuubo怎么做到适配MX2 Smartbar的,最后反编译Fuubo找到了答案,Fuubo采用的方式是actionbar.hide()来让魅族的Smartbar隐藏,然后headerbar看上去是google的Actionbar,其实是自己绘制的Actionbar。
2. 其他的左右侧栏菜单,下拉刷新 github上都有开源的组件 拿来用就行了。另外Fuubo还使用了 ListViewAnimations和 NineOldAndroids这两个开源组件。
tip:最新去Smartbar方法:https://github.com/gavinliu/SmartBarUtility

简单说说新浪微博OAuth 2.0授权:
1. 浏览器请求一个授权地址
2. 输入帐号 密码
3. 然后新浪会重定向到一个地址
4. 你去解析这个地址,地址里面有access_token等我们需要的数据

虽然新浪SDK里面提供了个授权的界面,但是很明显不能满足我们的要求,所以我们得自己写这个实现。
这部分代码主要是在 com.gavin.toobo.ui.OauthActivity 
    授权地址的格式:
https://api.weibo.com/oauth2/authorize?
client_id=[id]&
redirect_uri=[重定向地址]&
response_type=token&display=mobile
    通过对 WebView 进行 setWebViewClient(); 操作可以监听到浏览器加载一个页面的生命周期进行监听
public void onCreate(Bundle savedInstanceState) {                ...webView.setWebViewClient(new WeiboWebViewClient());                ...webView.loadUrl(url);}private class WeiboWebViewClient extends WebViewClient {                ...@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {                        // 如果是访问的是我们重定向的 url 则表示授权成功,进行解析if (url.startsWith(getString(R.string.sina_redirect_uri))) {                                // 解析urlhandleSinaRedirectUrl(view, url);                                // 停止浏览器的加载view.stopLoading();view.loadUrl("about:blank");}super.onPageStarted(view, url, favicon);}}private void handleSinaRedirectUrl(WebView view, String url) {                // 新浪sdk中提供了解析的方法,直接返回一个bundle对象Bundle values = Utility.parseUrl(url);String error = values.getString("error");String error_code = values.getString("error_code");if (error == null && error_code == null) {Toast.makeText(this, "授权成功", Toast.LENGTH_SHORT).show();String accessToken = values.getString("access_token");String expires_in = values.getString("expires_in");Oauth2AccessToken token = new Oauth2AccessToken(accessToken, expires_in);AccessTokenKeeper.keepAccessToken(this, token);} else if (error.equals("access_denied")) {Toast.makeText(this, "用户或授权服务器拒绝授予数据访问权限", Toast.LENGTH_SHORT).show();} else {Toast.makeText(this, "授权异常", Toast.LENGTH_SHORT).show();}}
UI解析:自定义Actionbar
和Fuubo不一样,我的解决办法相对简陋一点,我是定义了一个 actionbar.xml 的布局文件,然后需要用到actionbar的地方都<include layout="@layout/actionbar" />

UI解析:左右滑动的侧栏(SlidingMenu)
这里部分代码主要在:com.gavin.toobo.ui.TooboActivity
(如果之前没使用过SlidingMenu,建议把github上的例子程序看看)

UI解析:下拉刷新(PullToRefresh)
这里部分代码主要在:com.gavin.toobo.ui.HomeFragment
(如果之前没使用过PullToRefresh,建议把github上的例子程序看看)

源码下载:http://download.csdn.net/detail/lyl_studio/5772151
tips:需要你在 com.gavin.toobo.ui.LoginActivity 里面修改授权地址,把id修改成你自己的客户端的id






原创粉丝点击