xUtils3学习笔记一:BitMapUtils,ViewUtils

xUtils分为四个模块:注解模块,网络模块,图片加载模块,数据库模块。

xUtils3相对于旧版本xUtils具有如下变化:
HTTP实现替换HttpClient为UrlConnection, 自动解析回调泛型, 更安全的断点续传策略.
支持标准的Cookie策略, 区分domain, path…
事件注解去除不常用的功能, 提高性能.
数据库api简化提高性能, 达到和greenDao一致的性能.
图片绑定支持gif(受系统兼容性影响, 部分gif文件只能静态显示), webp; 支持圆角, 圆形, 方形等裁剪, 支持自动旋转…

今天学习了xUtils3注解模块和图片加载模块。

一、添加依赖

下载xUtils模块(https://github.com/wyouflf/xUtils3)并添加依赖:

compile project(path: ':xutils')

在自己应用的Application中初始化xUtils参数:

x.Ext.init(this);
x.Ext.setDebug(BuildConfig.DEBUG);

二、注解模块

在Activity的oncreate方法里面加上下面的代码:

x.view().inject(this);

对父布局和相关控件添加注解:

@ContentView(R.layout.activity_main)
public class MainActivity extends Activity {
    @ViewInject(R.id.img)
    private ImageView img;

    ImageOptions m_imageOptions;

    @ViewInject(R.id.txt)
    private TextView txt;

    @ViewInject(R.id.btn)
    Button btn;

处理控件的响应事件

@Event(value = {R.id.btn1,R.id.btn2},type = View.OnClickListener.class
            //type = View.OnLongClickListener.class
    )
    private void btnClick(View view){
        switch (view.getId()){
            case R.id.btn1:
                Toast.makeText(getActivity(),"btn1",Toast.LENGTH_LONG).show();
                break;
            case R.id.btn2:
                Toast.makeText(getActivity(),"btn2",Toast.LENGTH_LONG).show();
                break;
        }
    }

这里写图片描述
其中箭头所指部分既可以单独展开处理也可以利用数组(如上图)合并处理。type属性为可选项,默认值View.OnClickListener.class.如果你想实现其余点击事件效果,只需要把type值进行修改即可。
在fragment中使用注解模块需要区别于activity的是activity中是在oncreate方法里面加上下面的代码:

x.view().inject(this);

对应的fragment则是在onCreateView和onViewCreated方法中进行绑定

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        injected=true;
        return x.view().inject(this,inflater,container);
    }

 @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        if (!injected) x.view().inject(this,getView());
    }

三、图片加载模块

支持本地、在线、assets图片的显示,方法如下:

void bind(ImageView view, String url);

    void bind(ImageView view, String url, ImageOptions options);

    void bind(ImageView view, String url, Callback.CommonCallback<Drawable> callback);

    void bind(ImageView view, String url, ImageOptions options, Callback.CommonCallback<Drawable> callback);

    Callback.Cancelable loadDrawable(String url, ImageOptions options, Callback.CommonCallback<Drawable> callback);

    Callback.Cancelable loadFile(String url, ImageOptions options, Callback.CacheCallback<File> callback);

    void clearMemCache();

    void clearCacheFiles();

可以利用ImageOptions类配置图片显示参数

示例如下:

x.image().bind(img, "http://f.hiphotos.baidu.com/zhidao/pic/item/2fdda3cc7cd98d104cc21595203fb80e7bec907b.jpg");

        x.image().bind(img, "http://preview.quanjing.com/mf063/mf866-03580453.jpg", m_imageOptions, new Callback.CommonCallback<Drawable>() {
            @Override
            public void onSuccess(Drawable result) {
                mHandler.sendEmptyMessage(11);
                Log.d("MainActivity", "onSuccess() ");
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                mHandler.sendMessage(mHandler.obtainMessage(12));
                Log.d("MainActivity", "onError() ");
            }

            @Override
            public void onCancelled(CancelledException cex) {
                Log.d("MainActivity", "onCancelled() ");
            }

            @Override
            public void onFinished() {
                mHandler.sendMessage(mHandler.obtainMessage(13, 1, 3));
                Log.d("MainActivity", "onFinished() ");
            }
        });
        x.image().bind(img, "/data/data/car.jpg",m_imageOptions);
        x.image().bind(img, "assets://8.jpg",m_imageOptions);
m_imageOptions = new ImageOptions.Builder()
                .setSize(DensityUtil.dip2px(120), DensityUtil.dip2px(120))
                .setRadius(DensityUtil.dip2px(5))
                .setCrop(true)
                .setImageScaleType(ImageView.ScaleType.CENTER_CROP)
                .setLoadingDrawableId(R.mipmap.ic_launcher)
                .setFailureDrawableId(R.mipmap.ic_launcher)
                .build();

中间有个小插曲:我在百度上随机搜了一张图片,并复制了网址(http://image.so.com/zv?ch=car&src=home_car#ch=car&src=home_car&groupid=685006f6b7fbff0967b9de48ca5642c6&itemindex=0&dataindex=174)然后去试验,结果没显示,问了wyouflf才知道这个是一个html页面,图片的实际地址是在http://preview.quanjing.com/mf063/mf866-03580453.jpg,多谢wyouflf的指点,不胜感谢。

还可以设置一个可以取消网络请求图片的加载方式,不如限时加载,没加载完成则取消

 Callback.Cancelable cancelable=x.image().loadDrawable("http://f.hiphotos.baidu.com/zhidao/pic/item/2fdda3cc7cd98d104cc21595203fb80e7bec907b.jpg", null, new Callback.CommonCallback<Drawable>() {
            @Override
            public void onSuccess(Drawable result) {
                img2.setImageDrawable(result);
                txtState.setText("onSuccess");
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                txtState.setText("onError");
            }

            @Override
            public void onCancelled(CancelledException cex) {

            }

            @Override
            public void onFinished() {

            }
        });
        //cancelable.cancel();

对了,别忘记了添加访问网络和sd卡的权限额

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值