天天看點

xUtils架構的介紹(二)

下面依次開始介紹這些元件具體的使用。

一、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);