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

能完成这个实例,感谢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 {
                ...

		@Override
		public void onPageStarted(WebView view, String url, Bitmap favicon) {
                        // 如果是访问的是我们重定向的 url 则表示授权成功,进行解析
			if (url.startsWith(getString(R.string.sina_redirect_uri))) {
                                // 解析url
				handleSinaRedirectUrl(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的地方都

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
Andoid - 开发实例(8):高仿Fuubo新浪微博客户端_第1张图片
Andoid - 开发实例(8):高仿Fuubo新浪微博客户端_第2张图片
Andoid - 开发实例(8):高仿Fuubo新浪微博客户端_第3张图片 Andoid - 开发实例(8):高仿Fuubo新浪微博客户端_第4张图片
Andoid - 开发实例(8):高仿Fuubo新浪微博客户端_第5张图片
Andoid - 开发实例(8):高仿Fuubo新浪微博客户端_第6张图片
Andoid - 开发实例(8):高仿Fuubo新浪微博客户端_第7张图片

你可能感兴趣的:(Android,Notes,Android,开发实例)