UniversaLimageloader加RollPagerView实现网络加载圆角图片轮播

需求:从网络加载图片,并轮播显示,显示区域为圆角矩形。就这么个简单的需求,这里要快速开发。我们可以选择轮播框架RollPagerView与图片加载框架UniversalImageloader来实现。


1.环境配置,主要是加载依赖。开发工具啥的,全凭你们自己的爱好。
1.1 lib文件中添加UniversaLimageloader的jar包universal-image-loader-1.9.5.jar
1.2 gradle文件中添加RollpagerView的依赖com.jude:rollviewpager:1.4.5
2.环境配置好了,那么我们来使用吧。
2.1布局文件,引入RollviewPager控件

<com.jude.rollviewpager.RollPagerView
            android:layout_below="@id/rp_mainac_baseinfo"
            android:id="@+id/rp_mainac_mainad"
           android:layout_gravity="center"
            android:layout_width="350dp"
            android:layout_height="160dp"
            app:rollviewpager_hint_gravity="center"
            app:rollviewpager_hint_paddingBottom="110dp"
            app:rollviewpager_play_delay="3000"
            >
        </com.jude.rollviewpager.RollPagerView>
<!--为圆角图片控件,经网络加载的图片通过圆角图片控件显示-->
<?xml version="1.0" encoding="utf-8"?>
<com.hlhjni.hmscale.widget.CircleRactImagView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/im_mainacad_viewpage"
    android:layout_width="370dp"
    android:layout_height="200dp"/>

2.2自定义圆角UI

public class CircleRactImagView extends ImageView {

    private Paint paint;

    public CircleRactImagView(Context context) {
        this(context,null);
    }

    public CircleRactImagView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public CircleRactImagView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        paint = new Paint();
    }

    /**
     * 绘制圆角图片
     * @author caizhiming
     */
    @Override
    protected void onDraw(Canvas canvas) {

        Drawable drawable = getDrawable();
        if (null != drawable) {
            Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
            Bitmap b = getCircleBitmap(bitmap, 20);
            final Rect rectSrc = new Rect(0, 0, b.getWidth(), b.getHeight());
            final Rect rectDest = new Rect(0,0,getWidth(),getHeight());
            paint.reset();
            canvas.drawBitmap(b, rectSrc, rectDest, paint);
        } else {
            super.onDraw(canvas);
        }
    }

    /**
     * 获取圆形图片方法
     * @param bitmap
     * @param roundPx //圆角半径
     * @return Bitmap
     * @author caizhiming
     */
    private Bitmap getCircleBitmap(Bitmap bitmap, int roundPx) {
        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);
        final int color = 0xff424242;

        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        final RectF rectF = new RectF(rect);
        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);



        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);
        return output;


    }

2.3.Activity中逻辑代码
2.3.1使用ImagLoader之前配置ImagLoader

 private void ownloadImFromUrl() {
        //设置加载图片的缓存目录
        File imcacheDir = StorageUtils.getOwnCacheDirectory(mcont, "imageloader/Cache");
        //配置Imageload
        ImageLoaderConfiguration imlconfig = new ImageLoaderConfiguration
                .Builder(mcont)
                .memoryCacheExtraOptions(480, 800)
                //线程池内加载的数量
                .threadPoolSize(3)
                .threadPriority(Thread.NORM_PRIORITY - 2)
                .denyCacheImageMultipleSizesInMemory()
                // You can pass your own memory cache implementation/你可以通过自己的内存缓存实现
                .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))
                .memoryCacheSize(2 * 1024 * 1024)
                .discCacheSize(50 * 1024 * 1024)
                //将保存的时候的URI名称用MD5 加密
                .discCacheFileNameGenerator(new Md5FileNameGenerator())
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                //缓存的文件数量
                .discCacheFileCount(100)
                .diskCache(new UnlimitedDiskCache(imcacheDir))
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
                // connectTimeout (5 s), readTimeout (30 s)超时时间
                .imageDownloader(new BaseImageDownloader(mcont, 5 * 1000, 30 * 1000))
                .writeDebugLogs() // Remove for release app
                .build();//开始构建
        ImageLoader.getInstance().init(imlconfig);
    }

    private DisplayImageOptions getDisplayOptions() {
        DisplayImageOptions options;
        options = new DisplayImageOptions.Builder()
                // 设置图片在下载期间显示的图片
                .showImageOnLoading(R.drawable.ic_launcher)
                // 设置图片Uri为空或是错误的时候显示的图片
                .showImageForEmptyUri(R.drawable.ic_launcher)
                // 设置图片加载/解码过程中错误时候显示的图片
                .showImageOnFail(R.drawable.ic_launcher)
                // 设置下载的图片是否缓存在内存中
                .cacheInMemory(true)
                // 设置下载的图片是否缓存在SD卡中
                .cacheOnDisc(true)
                // 是否考虑JPEG图像EXIF参数(旋转,翻转)
                .considerExifParams(true)
                // 设置图片以如何的编码方式显示
                .imageScaleType(ImageScaleType.EXACTLY)
                // 设置图片的解码类型//
                .bitmapConfig(Bitmap.Config.RGB_565)
                // 设置图片在下载前是否重置,复位
                .resetViewBeforeLoading(true)
                // 是否设置为圆角,弧度为多少
                .displayer(new RoundedBitmapDisplayer(20))
                // 是否图片加载好后渐入的动画时间
                .displayer(new FadeInBitmapDisplayer(100))
                .build();// 构建完成
        return options;
    }

2.3.2配置RollpagerView的显示适配器

 /**
     * 通过Imagloader加载网络图片
     */
    class RpmainacMainadapter extends StaticPagerAdapter {
        private final DisplayImageOptions options;
        private List<ImageView> mviewlist;
        private ImageLoader mimageloader;

        public RpmainacMainadapter(List<ImageView> viewlist, ImageLoader imageloader) {
            options = getDisplayOptions();
            this.mviewlist = viewlist;
            this.mimageloader = imageloader;
        }

        @Override
        public View getView(ViewGroup container, int position) {
            ImageView mainadim = mviewlist.get(position);
            String imurl = imloadurl[position];
            mimageloader.displayImage(imurl, mainadim, options, new ImageLoadingListener() {
                @Override
                public void onLoadingStarted(String s, View view) {

                }

                @Override
                public void onLoadingFailed(String s, View view, FailReason failReason) {
                    Toast.makeText(mcont, "加载错误:" + s, Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onLoadingComplete(String s, View view, Bitmap bitmap) {

                }

                @Override
                public void onLoadingCancelled(String s, View view) {

                }
            });
            return mviewlist.get(position);
        }

        @Override
        public int getCount() {
            return mviewlist.size() > 0 ? mviewlist.size() : 0;
        }
    }

2.3.3在Activity初始化的时候,初始化RollPagerView的显示

 private void initRpMainacMainad() {
        ArrayList<ImageView> imlist = new ArrayList<>();
        ImageLoader imageloader = ImageLoader.getInstance();
        //填充布局
        View adpage = LayoutInflater.from(mcont).inflate(R.layout.rp_mainac_mainad_ly, rpMainacMainad, false);
        View adpageone = LayoutInflater.from(mcont).inflate(R.layout.rp_mainac_mainad_one_ly, rpMainacMainad, false);
        View adpagetwo = LayoutInflater.from(mcont).inflate(R.layout.rp_mainac_mainad_two_ly, rpMainacMainad, false);
        ImageView adpageim = (ImageView) adpage.findViewById(R.id.im_mainacad_viewpage);
        ImageView adpageonim = (ImageView) adpageone.findViewById(R.id.im_mainacad_one_viewpage);
        ImageView adpagetwoim = (ImageView) adpagetwo.findViewById(R.id.im_mainacad_two_viewpage);
        imlist.add(0, adpageim);
        imlist.add(1, adpageonim);
        imlist.add(2, adpagetwoim);
        //网络图片的地址
        imloadurl = new String[]{
                NetRequestURLConst.BASE_MAIN_IMG + NetRequestURLConst.IMG_MAIN_01, NetRequestURLConst.BASE_MAIN_IMG + NetRequestURLConst.IMG_MAIN_02, NetRequestURLConst.BASE_MAIN_IMG + NetRequestURLConst.IMG_MAIN_03
        };
        RpmainacMainadapter rpmainacMainadapter = new RpmainacMainadapter(imlist, imageloader);
        rpMainacMainad.setAdapter(rpmainacMainadapter);
    }

3.完成就这些,圆角轮播器已经可以加载显示网络图片了。你们自己试试吧!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的兄弟叫顺溜2011

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值