Days38xUtils

来源:互联网 发布:淘宝店怎么免费推广 编辑:程序博客网 时间:2024/06/18 05:17

xUtils框架
参考自:http://www.android100.org/html/201606/19/243677.html
xUtils 是一个工具类的集合体,其中包含许多实用的Android工具,主要包含四大模块:
1、ViewUtils的模块
2、HttpUtils的模块
3、BitmapUtils的模块
4、DBUtils的模块
现在有两个版本:2.6.14版本和3.3.36版本,使用上会有差别;
(一)ViewUtils模块
三种用途:1、控件注解 2、资源注解 3、控件的回调方法的注解
注意:所有用到的IOC成员变量,使用的时候
在activity中必须写在x.view().inject(this)(低版本的注入导包时要注意,v7包下也有ViewUtils,不要导错,ViewUtils.inject(this);)之后
在fragment中需要在加载视图view之后,(低版本)ViewUtils.inject(this, view)
相当于给activity了使用xUtils的权限,不然程序会崩溃()
a、控件的注解

//   1、 控件的注解,进行UI绑定,无需findViewById()    @ViewInject(R.id.txtShow)    private TextView txtShow;

b、资源注解(低版本可用)(要有type指明是什么资源)

//    2、资源的注解(eg:字符串)//    @ResInject (id = R.string.app_name , type = ResType.String)//    private String hehe;

c、控件的回调方法的注解
被注解的方法的要求:
1、必须以private修饰
2、返回值类型
当方法的返回值类型为void的时,返回值类型为任意(意思是给我了我并不用)
当方法的返回值类型不是void时,返回值类型必须是被注解的方法的返回值类型(意思是我要的必须给我)
3、参数签名和type的接口要求的参数签名一致(参数签名指:个数、类型、顺序),否则会报非法的参数异常

备注:
1、value为控件的id集合;注解参数支持数组:value={id1,id2}
2、type为事件类型,默认为点击事件;
3、如果type的接口类型提供多个方法,则需要使用method指定方法名
案例代码:

public class ViewInjectActivity extends AppCompatActivity {//   1、 控件的注解,进行UI绑定,无需findViewById()    @ViewInject(R.id.txtShow)    private TextView txtShow;    @ViewInject(R.id.vpShow)    private ViewPager vpShow;//    2、资源的注解(eg:字符串)//    @ResInject (id = R.string.app_name , type = ResType.String)//    private String hehe;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_view_inject);        /**         * ViewUtils的使用:         * 1、控件注解  2、资源注解  3、控件的回调方法的注解         * 所有用到的IOC成员变量,使用的时候必须写在x.view().inject(this)之后,不然程序会崩溃         *         */        x.view().inject(this);        setData();        txtShow.setText("this is demo1");    }    private void setData() {        final List<ImageView> list = new ArrayList<>();        int[] resId = new int[]{R.drawable.a1,R.drawable.a2,R.drawable.a3};        for (int i = 0;i<resId.length;i++){            ImageView iv = new ImageView(this);            iv.setImageResource(resId[i]);            list.add(iv);        }        vpShow.setAdapter(new PagerAdapter() {            @Override            public int getCount() {                return list.size();            }            @Override            public boolean isViewFromObject(View view, Object object) {                return view ==object;            }            @Override            public Object instantiateItem(ViewGroup container, int position) {                container.addView(list.get(position));                return list.get(position);            }            @Override            public void destroyItem(ViewGroup container, int position, Object object) {                container.removeView(list.get(position));            }        });    }    /**     * 3、回调方法的注解     * 备注:     * value为控件的id集合;注解参数支持数组:value={id1,id2}     * type为事件类型,默认为点击事件;     * 如果type的接口类型提供多个方法,则需要使用method指定方法名     *     *     * 被注解的方法的要求:     * 1、必须以private修饰     * 2、返回值类型     * 当方法的返回值类型为void的时,返回值类型为任意(意思是给我了我并不用)     * 当方法的返回值类型不是void时,返回值类型必须是被注解的方法的返回值类型(意思是我要的必须给我)     * 3、参数签名和type的接口要求的参数签名一致(参数签名指:个数、类型、顺序),否则会报非法的参数异常     *///  你可以给我但我不用    @Event(R.id.btnShow)    private boolean abc(View view){        txtShow.setText("click one");        return false;    }//    @Event(R.id.btnShow)//    private void abc(View v){//        txtShow.setText("click one ..");//    }//   我要的必须给我    @Event(value = R.id.btnShow3,type = View.OnLongClickListener.class)    private boolean efg(View view){        txtShow.setText("long click me");        return false;    }//   当type中提供多个方法,用method指定方法名    @Event(value = R.id.vpShow,type = ViewPager.OnPageChangeListener.class,method = "onPageSelected")    private void hij(int position){        txtShow.setText("this is "+(position+1)+"  page");    }//    @Event({R.id.btnShow,R.id.btnShow1})//    private String abc(View v){//        switch (v.getId()){//            case R.id.btnShow://                txtShow.setText("click one one");//                break;//            case R.id.btnShow1://                txtShow.setText("click two two");//                break;//        }//        return null;//    }}

(二)HttpUtils模块
相比于使用OkHttp,可以简化代码,其实两行代码就可以实现从网络上获取资源
案例代码:

public class HttpUtilsActivity extends AppCompatActivity {    private Callback.Cancelable mCancelable;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_http_utils);    }    //注意:需要在application创建时初始化xUtils    /**     * xUtils初始化步骤:     * 1、创建自己的application类,在onCreate方法中执行x.Ext.init(this);代码     * 2、别忘了在manifest文件里,application标签中添加name属性     * @param view     */    public void get(View view) {        String url = "http://api.fengniao.com//app_ipad/pic_bbs_list_v2.php?appImei=000000000000000&osType=Android&osVersion=4.1.1&fid=24&page=1";        RequestParams entity = new RequestParams(url);//      CommonCallback相当于一直在监听请求的状态                mCancelable = x.http().get(entity, new Callback.CommonCallback<String>() {//            请求成功的回调方法            @Override            public void onSuccess(String result) {                Toast.makeText(HttpUtilsActivity.this,"result:"+result,Toast.LENGTH_LONG).show();            }//            请求失败的回调方法            @Override            public void onError(Throwable ex, boolean isOnCallback) {                Toast.makeText(HttpUtilsActivity.this, "请求失败的回调方法", Toast.LENGTH_SHORT).show();            }//            取消请求的回调方法            @Override            public void onCancelled(CancelledException cex) {                Toast.makeText(HttpUtilsActivity.this, "取消请求的回调方法", Toast.LENGTH_SHORT).show();            }//           请求完成的回调方法(不管请求成功与否,均会调用此方法)            @Override            public void onFinished() {                Toast.makeText(HttpUtilsActivity.this, "请求完成的回调方法", Toast.LENGTH_SHORT).show();            }        });    }    public void post(View view) {//        与get方法的不同        /**         * 1、需要在RequestParams params = new RequestParams(url);之后         * 增加代码:    params.addBodyParameter("user","admin");    user对应表单中的标签名 ,admin对应服务器端保存的值         *               params.addBodyParameter("pass","123456");   如上         * 2、调用的是x.http().post(RequestParams params,CommonCallback<>  callback);         *         */    }}

(三)BitmapUtils
1、加载Bitmap的时候无需考虑Bitmap加载过程中出现的OOM和Android容器快速滑动时候出现的图片错位等现象;
2、支持加载网络图片和本地图片;
3、内存管理使用LRU算法,更好的管理bitmap内存;
4、可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。
低版本的使用:
1、加载网络图片
BitmapUtils bitmapUtils = new BitmapUtils(this);
bitmapUtils.display(testImageView, “http://bbs.lidroid.com/static/image/common/logo.png“);

2、加载本地图片(路径以/开头, 绝对路径)
BitmapUtils bitmapUtils = new BitmapUtils(this);
bitmapUtils.display(testImageView, “/sdcard/test.jpg”);

3、加载assets中的图片(路径以assets开头)
BitmapUtils bitmapUtils = new BitmapUtils(this);
bitmapUtils.display(testImageView, “assets/img/wallpaper.jpg”);

4、使用ListView等容器展示图片时可通过PauseOnScrollListener控制滑动和快速滑动过程中时候暂停加载图片
BitmapUtils bitmapUtils = new BitmapUtils(this);
listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true));
listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true, customListener));
高版本的使用:
案例代码:

public class ImageActivity extends AppCompatActivity{    @ViewInject(R.id.iv)    private ImageView iv;//    建造者类,可以添加对ImageView显示图片的设置    private ImageOptions options;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_image);        x.view().inject(this);        options = new ImageOptions.Builder()//                设置图片的保存质量                .setConfig(Bitmap.Config.ARGB_8888)//                设置图片下载失败时显示的图片(当没有网络时会显示)(当地址错误会XX)                .setFailureDrawableId(R.drawable.a3)//                设置正在加载的图片                .setLoadingDrawableId(R.drawable.a1)//                设置图片是否是圆形 ;注意:慎用,是对图片的处理,不是直接操作ImageView;                .setCircular(true)//                设置图片是否渐入                .setFadeIn(true)//                设置是否使用缓存;注意:此处是3g缓存功能;                .setUseMemCache(true)//                设置是否忽略gif图片                .setIgnoreGif(true)//                .setIgnoreGif(false)                .build();    }    public void click(View view) {//        String url = "http://ww1.sinaimg.cn/mw690/4b08ac5ejw1f8n24jqt3oj22yo4g0kjs.jpg";        String url = "http://qq.yh31.com/tp/zjbq/201512052121443594.gif";//        将要ImageView控件与图片的url和对控件显示图片的一些设置绑定在一起        x.image().bind(iv,url,options);    }//*****************************************************************//注意:ImageView加载图片过程:最开始会从内存里加载图片,如果找到图片就会直接返回图片,如果没有就会从硬盘缓存里面去取图片,//如果硬盘缓存还没有就会从网络加载图片;从网络加载图片,会存一份在内存中,同时存一份在外存SDcard中;//********************************************************************}
0 0
原创粉丝点击