基于ViewPager和Glide的图片预览

3,410 阅读1分钟

首先是效果图


可以放大、缩小、旋转

布局文件结构

  • RelativeLayout
    • ViewPager
    • TextView

相对布局中包含ViewPager和底部页码标识

定义适配器,以下是关键代码,加载图片

@NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, final int position) {
        final PhotoView photoView = new PhotoView(activity);
        //开启图片缩放功能
        photoView.enable();
        //设置缩放级别
        photoView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        //设置最大缩放倍数
        photoView.setMaxScale(2.5f);
        //参数设置
        RequestOptions requestOptions = new RequestOptions()
                .placeholder(R.drawable.loading)
                .error(R.drawable.image_error);
        //加载图片
        Glide.with(activity)
                .load(imageList.get(position))
                .apply(requestOptions)
                .into(photoView);
        //点击事件,返回
        photoView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                photoView.disenable();
                activity.finish();
            }
        });
        //双击事件
        photoView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if(imageLongClick != null){
                    imageLongClick.longClickImage(position);
                }
                return true;
            }
        });
        container.addView(photoView);
        return photoView;
    }

设置Activity全屏

        //全屏
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

更新底部数字索引

imageBrowserViewPager.addOnPageChangeListener (new ViewPager.OnPageChangeListener () {
            @Override
            public void onPageScrolled (int position, float positionOffset, int positionOffsetPixels) {
                currentIndex = position;
                updateBottomIndex(position + 1);
            }
            @Override
            public void onPageSelected (int position) {
                updateBottomIndex(position + 1);
            }
            @Override
            public void onPageScrollStateChanged (int state) {

            }
        });

在onCreate和onFinish中添加fadein和fadeout动画


overridePendingTransition(R.anim.fade_in,R.anim.fade_out);
        
overridePendingTransition(R.anim.fade_in_disappear,R.anim.fade_out_disappear); 

项目源地址为 [github.com/lxj-hellowo…]