前不久用Android studio开发了一个生活工具类,用到了许多热门的第三方技术,为此整理一下,共享交流:

 

Bmob云

Rxvolley网络框架:

Picasso加载图片

Json数据解析

PhotoView操作图片

Webview网页加载

CircleImageView裁剪图片

 

Bmob云

 

Bmob平台为您的移动应用提供了一个完整的后端解决方案,我们提供轻量级的SDK开发包,让开发者以最小的配置和最简单的方式使用Bmob平台提供的服务,进而完全消除开发者编写服务器代码以及维护服务器的操作。

Bmob注册 

下载sdk  使用用户数据管理功能 

使用请查看文档:

http://docs.bmob.cn/android/developdoc/index.html?menukey=develop_doc&key=develop_android

 

Rxvolley网络框架:

RxVolley是一个基于Volley的网络请求库; 
它移除了原Volley的 HttpClient 相关 API ,因为HttpClient是比较复杂的,同时可以支持下列功能: 
可以选择使用OKHttp替代默认的 HttpUrlConnection做网络请求; 
可以选择使用图片加载功能ImageLoader(复用的网络请求将有效减少apk体积);

说到RxVolley咱们首先会想到Volley,那Volley又是什么呢?咱们可以先简单回顾一下: 
Android开发团队为了将HTTP的通信操作简单化,在2013年Google I/O大会上推出了一个新的网络通信框架——Volley。Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁的网络操作,而对于大数据量的网络操作,比如说下载文件等,Volley的表现就会非常糟糕。

Volley有如下几个特点: 
1.通信更快、更简单 
2.GET、POST网络请求及网络图像的高效率异步处理请求 
3.对请求进行优先级的排序 
4.网络请求的缓存 
5.和Activity生命周期的联动 
6.不太适合进行网络数据的上传和下载

Volley提供了这么几个请求对象: 
StringRequest:返回的结果不确定时使用 
JsonObjectRequest:返回结果为JsonObject,直接使用该对象,方便封装数据 
JsonArrayRequest:返回结果为JsonArray,直接使用该对象,方便封装数据 
Volley提供了一些使用方便的回调方法: 
onResponse:在请求成功时调用 
onErrorResponse:在请求失败时调用

picasso是Square公司开源的一个Android图形缓存库

主要有以下一些特性:

在adapter中回收和取消当前的下载;

使用最少的内存完成复杂的图形转换操作;

自动的内存和硬盘缓存;

图形转换操作,如变换大小,旋转等,提供了接口来让用户可以自定义转换操作;

加载载网络或本地资源;

 

Json数据解析:

  JSON是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。

      本文主要是对JS操作JSON的要领做下总结。

  

      在JSON中,有两种结构:对象和数组。

 

      一个对象以"{"(左括号)开始,"}"(右括号)结束。每个"名称"后跟一个":"(冒号);"'名称/值’'对"之间运用 “,”(逗号)分隔。 名称用引号括起来;值如果是字符串则必须用括号,数值型则不须要。例如:

var o={
   "xlid":"cxh",
   "xldigitid":123456,
   "topscore":2000,
   "topplaytime":"2009-08-20"
};

      数组是值(value)的有序集合。一个数组以”[”(左中括号)开始,"]"(右中括号)结束。值之间运用 ","(逗号)分隔。

      例如:

var jsonranklist=[
{
   "xlid":"cxh",
   "xldigitid":123456,
   "topscore":2000,
   "topplaytime":"2009-08-20”
},       
{
   "xlid":"zd",
   "xldigitid":123456,
   "topscore":1500,
   "topplaytime":"2009-11-20"
}
];

     在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:

     JSON字符串:

var str1='{"name":"cxh","sex": "man"}';

    JSON对象: 

var str2={"name":"cxh","sex":"man"};

     特别留心:如果obj本来就是一个JSON对象,那么运用 eval()函数转换后(哪怕是多次转换)还是JSON对象,但是运用 parseJSON()函数处理后会有疑问(抛出语法异常)。

     二、可以运用 toJSONString()或者全局的JSON.stringify()函数将JSON对象转化为JSON字符串

     例如:

//将JSON对象转化为JSON字符
var last=obj.toJSONString();

    或者

//将JSON对象转化为JSON字符
var last=JSON.stringify(obj);

总结:

 ①:在数据传输流程中,json是以文本,即字符串的形式传递的

  ②:Json.stringify()将JSON对象转为JSON字符串(序列化);

  ③:Json.parse()将JSON字符串转为JSON对象(反序列化);

PhotoView操作图片

对于一个ImageView或者说View来说,view的大小是不变的,那图片如何实现大小的变化呢?答案就是 Matrix 。 
Matrix的定义 :字面意思是矩阵,在Android中表示使用矩阵的方法来对图片进行变换。可以略微想象一下,图片有很多个像素点,每个像素点都有它的值,将图片看作一个矩阵,那么对图片进行旋转,缩放实际上就是对矩阵进行变换。 Android对这个变换过程封装进了Matrix类 。 
在PhotoView中,ImageView(PhotoView继承于ImageView)的大小等是不变的, 变化的是里面的drawable 。

整体结构

PhotoView:继承于ImageView 实现了IPhotoView接口。 
IPhotoView接口:与PhotoView相关的接口。涉及到手势事件的监听和图像的变换。 
PhotoViewAttacher:实现了IPhotoView,OnTouchListener等事件的接口。是PhotoView中接口的具体实现类 。

PhotoView中的几个Matrix

·        mBaseMatrix 基础的matrix,图片根据ScaleType来决定最初的大小,在初始化完成之后就基本不会改变,除非布局发生了变化。

·        mSuppMatrix 由于mBaseMatrix在初始化后基本是不变的(布局发生变化的时候会重置mBaseMatrix),因此需要另外一个matrix来记录这些变化(比如说双击事件后缩放啊什么的),然后通过mBaseMatrix的右乘来将变化加进去。

·        mDrawMatrixmBaseMatrix右乘mSuppMatrix,实际上就是存储所有变化的matrix,最后set进imageView的就是这个

具体看代码流程

PhotoView初始化的时候干了三件事:

·        绑定PhotoViewAttacher对象

·        根据ScaleType确定初始Matrix,也就是mBaseMatrix。这里注意,进行Matrix变换必须将ScaleType设置为Matix。那表示我们设置ScaleType就没有效果了吗?其实,PhotoView在初始化时会先记录下当前设置的ScaleType,只有在需要进行变换的时候才会将ScaleType设置成Matrix。

·        设置各种监听,Drag,手势,DoubleClick等。

一个手势的具体运作流程,以双击事件为例

添加监听通常是在初始化时完成的,去PhotoView和PhotoViewAttacher的构造函数里找找看。最终在PhotoViewAttacher的构造函数中找到了:

mGestureDetector.setOnDoubleTapListener(newDefaultOnDoubleTapListener(this));
mGestureDetector负责从onTouch中把MotionEvent传递给DefaultOnDoubleTapListener。
if (null !=mGestureDetector && mGestureDetector.onTouchEvent(ev)){
                handled = true;
}

总而言之,DefaultOnDoubleTapListener是通过如上的方式接收到View的MotionEvent的,但这不是重点,重点是在DefaultOnDoubleTapListener中如何处理这个事件。

 

webview有两个方法:setWebChromeClient 和 setWebClient
setWebViewClient:主要处理解析,渲染网页等浏览器做的事情
setWebChromeClient:辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等

WebViewClient就是帮助WebView处理各种通知、请求事件的。

WebChromeClient是辅助WebView处理JavaScript的对话框,网站图标,网站title,加载进度等
onCloseWindow(关闭WebView) 
onCreateWindow() 
onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出) 
onJsPrompt 
onJsConfirm 
onProgressChanged 
onReceivedIcon 
onReceivedTitle
比如可以添加进度条,使得界面更友好

 

CircleImageView 详细介绍

CircleImageView是一个轻松帮你实现圆形效果ImageView 图片库, CircleImageView 是基于 ImageView 扩展出来, 因此它拥有 ImageView 控件所有属性, 简单易用值得你使用的库。文章查看:

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0806/3268.html