关闭

基于xUtils3的在listview中加载长图

1419人阅读 评论(0) 收藏 举报
分类:

因项目中使用的工具是xUtils3,在listview中加载长图的时候,用的xUtils3的方法API

方法:原理是:得到图片的宽高,然后根据宽高比,计算比例,如果认为是长图,就转成bitmap,进行裁剪,然后展示。这里没有使用BitmapFactory.Options的原因是,通过xUtils3,加载到的图片result,它的方法里得不到它的存放路径,但是可以直接获取到宽高。

/**
     * 处理长图
     * @param iv 要展示图片的控件
     * @param urlpath 要处理图片的Url
     */
    private void dealWithLongImage(final ImageView iv,final String urlpath){
        ImageOptions imageOptions = new ImageOptions.Builder()
                .setIgnoreGif(true)
//                .setImageScaleType(ImageView.ScaleType.CENTER_CROP)
                .setFailureDrawableId(R.mipmap.loadfailed)
                .setLoadingDrawableId(R.mipmap.loading)
                .setUseMemCache(true)
                .build();

            x.image().loadDrawable(urlpath, imageOptions, new Callback.CommonCallback<Drawable>() {

                @Override
                public void onSuccess(Drawable result) {
                    try{
                        int heigth = result.getIntrinsicHeight();
                        int width = result.getIntrinsicWidth();
                        LogUtils.i("width---"+width);
                        LogUtils.i("heigth---"+heigth);
                        //用于模拟崩溃异常
//                        int x=1/0;
//                        LogUtils.i("----x----"+x);
                        if (heigth != 0 && width != 0) {
                            if (heigth / width >= 3) {
                                //高度远大于宽度
                                BitmapDrawable bd = (BitmapDrawable) result;
                                Bitmap bm = bd.getBitmap();
                                Bitmap mBitmap = Bitmap.createBitmap(bm, 0, 0, width, (int)(width*1.5));
                                iv.setImageBitmap(mBitmap);

                            }else if(width / heigth >= 3){
                                //宽度远大于
                                BitmapDrawable bd = (BitmapDrawable) result;
                                Bitmap bm = bd.getBitmap();
                                Bitmap mBitmap = Bitmap.createBitmap(bm, 0, 0, (int)(heigth*1.5), heigth);
                                iv.setImageBitmap(mBitmap);
                            } else{
                                iv.setImageDrawable(result);
//                                BitmapHelper.display(iv, urlpath);
                            }
                        }else{
                            iv.setImageDrawable(result);
//                            BitmapHelper.display(iv, urlpath);
                        }
                    }catch (Exception e) {
                        e.printStackTrace();
                        BitmapHelper.display(iv, urlpath);
                    }

                }

                @Override
                public void onError(Throwable ex, boolean isOnCallback) {

                }

                @Override
                public void onCancelled(CancelledException cex) {

                }

                @Override
                public void onFinished() {

                }
            });

    }

最后,在listview的getItemView中,调用方法dealWithLongImage(iv, urlpath);
注:这里访问网络是异步加载,想在工具类中创建该方法,然后返回处理好的bitmap直接用ImageView加载,是不可行的。所以,需要在使用的当前文件中创建

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:90398次
    • 积分:1667
    • 等级:
    • 排名:千里之外
    • 原创:71篇
    • 转载:5篇
    • 译文:5篇
    • 评论:21条
    文章分类
    最新评论