下面依次開始介紹這些元件具體的使用。
一、viewutils android中得ioc(控制反轉)架構,可以完全使用注解的方式來完成ui的綁定和事件綁定。簡單的說,viewutils的功能就是做這個的,但是可以說,就這麼個功能确是能極大的簡化我們的代碼。下面我們看下具體的代碼,順便對比下注解的方式綁定id和findviewbyid之間的差别。
@viewinject(r.id.btn)
private button btn;
@viewinject(r.id.img)
private imageview img;
@viewinject(r.id.list)
private listview list;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_second);
viewutils.inject(this);}
@override
btn = (button) findviewbyid(r.id.btn);
img = (imageview) findviewbyid(r.id.img);
list = (listview) findviewbyid(r.id.list);
}
如果項目中得activity中的控件相當多,那麼想象一下代碼中累積的那一大坨就真心受不了。通過xutils的簡單注解,就能輕松擺脫無盡壞味道的代碼。
注意:在使用注解綁定控件的時候,一定記得在oncreate中調用viewutils.inject(this);
下面我們再對比下android中事件綁定的差別。
@onclick({ r.id.btn, r.id.img })
public void clickmethod(view v) {
toast.maketext(secondactivity.this, "you clicked button!",
toast.length_short).show();
@onitemclick(r.id.list)
public void itemclick(adapterview<?> parent, view view, int position,long id) {
toast.maketext(secondactivity.this, "position--->" + position,
btn.setonclicklistener(this);
list.setonitemclicklistener(new onitemclicklistener() {
@override
public void onitemclick(adapterview<?> parent, view view,
int position, long id) {
toast.maketext(secondactivity.this, "position--->" + position,
toast.length_short).show();
}
});
@override
public void onclick(view v) {
switch (v.getid()) {
case r.id.btn:
toast.maketext(secondactivity.this, "you clicked button!",
toast.length_short).show();
break;
default:
}
原本綁定button的監聽事件要麼用醜陋的内部類,要麼activity實作onclicklistener,在複寫的onclick方法中去根據id。而xutils隻要通過簡單的一句注解就能實作監聽事件的功能,而且可以實作多個控件共用一個監聽方法。同時xutils提供onclick、onitemclick、onlongclick等15種事件監聽注解。
注意:在使用注解監聽事件的時候,監聽方法名是自定義的,但是一定要保證方法的通路修飾符為public,同時方法的參數要與android原來的監聽方法參數一緻,不僅參數類型,而且要保證參數的順序。
二、bitmaputils 加載網絡或本地bitmap的時候無需擔心再遇到oom的現象,管理bitmap的記憶體采用了lru算法,同時也能避免清單滑動過程中發生圖檔錯位等得現象。加載網絡圖檔時,還可以配置運作線程的數量,緩存路徑等。。。通過bitmaputils的各種構造器,可以很友善的建立出本地緩存路徑和緩存的大小,以及記憶體緩存的大小。
bitmaputils utils = new bitmaputils(this);
bitmapdisplayconfig config = new bitmapdisplayconfig(this);
config.setloadingdrawable(getresources().getdrawable(r.drawable.loading));
config.setloadfaileddrawable(getresources().getdrawable(r.drawable.failed));
config.setimageloadcallback(new imageloadcallback() {
@override
public void loadfailed(imageview imageview, drawable drawable) {
public void loadcompleted(imageview imageview, drawable drawable,
bitmapdisplayconfig config) {
});
config.setbitmapmaxwidth(480);
config.setbitmapmaxheight(720);
// utils.display(img, "http://img1.gtimg.com/news/pics/hv1/63/26/1451/94357968.jpg");
utils.display(img, "http://img1.gtimg.com/news/pics/hv1/63/26/1451/94357968.jpg", config);
bitmaputils在用來加載網絡圖檔時,可以配置加載圖檔尺寸的大小,加載成功和失敗的回調以及加載過程中圖檔的配置。同時也可以選擇不配置。
//bitmaputils.display(testimageview, "/sdcard/test.jpg"); //支援加載本地圖檔
// 使用listview等容器展示圖檔時可通過pauseonscrolllistener控制滑動和快速滑動過程中時候暫停加載圖檔
listview.setonscrolllistener(new pauseonscrolllistener(bitmaputils, false, true));
listview.setonscrolllistener(new pauseonscrolllistener(bitmaputils, false, true), customlistener);