首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >仿微信PhotoView+Viewpager浏览视频,图片,切换下一页前一页恢复原本大小

仿微信PhotoView+Viewpager浏览视频,图片,切换下一页前一页恢复原本大小

作者头像
程思扬
发布2022-01-11 15:10:23
发布2022-01-11 15:10:23
6320
举报
文章被收录于专栏:程思阳的专栏程思阳的专栏

之前效果

完成效果:

仿微信PhotoView+Viewpager浏览视频,图片,切换下一页前一页恢复原本大小

使用PhotoView+Viewpager浏览图片时,默认情况下上一张图片的状态是不会恢复的,了解的朋友肯定知道是Viewpager的缓存问题,要解决的话重写Viewpager修改缓存数,这样当然可以,但是效果的话,并不是很好,滑动的时候下一页处于黑屏状态,这次给大家分享一个方法,如果有更好的或者意见,欢迎在评论指出

代码语言:javascript
复制
 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
           @Override
           public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

           }

           @Override
           public void onPageSelected(int position) {
               tvTitle.setText(getString(R.string.picture_preview_image_num,
                       position + 1, images.size()));
             //获取子页面数量
               int childCount=mViewPager.getChildCount();
               for (int i=0;i<childCount;i++){
             //获取当前页面的view
                   View child=mViewPager.getChildAt(i);
             //获取当前页面中的PhotoView 
            PhotoView photoView=child.findViewById(R.id.prePhotoView);
                   if (photoView != null) {
             //获取photoView创建的PhotoViewAttacher
                       PhotoViewAttacher photoViewAttacher= (PhotoViewAttacher) photoView.getIPhotoViewImplementation();
              //通过photoViewAttacher设置缩放大小
             //第一个参数是获取photoViewAttacher自带的缩放大小最小值,第二个和第三个参数设置缩放中心
                       photoViewAttacher.setScale(photoViewAttacher.getMinimumScale(), 0f, 0f, true);
                   }
               }
           }

           @Override
           public void onPageScrollStateChanged(int state) {

           }
       });

PhotoView使用

代码语言:javascript
复制
:
引入依赖:

implementation 'com.github.chrisbanes:PhotoView:1.3.1'

build.gradle中加入:

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

添加布局:

代码语言:javascript
复制
<uk.co.senab.photoview.PhotoView
  android:id="@+id/photoView"
  android:layout_width="180dp"
  android:layout_height="140dp"
  android:background="#333333"
  android:layout_marginLeft="20dp"
  />

视频的话我用的是VideoView,代码就不贴出了,大家可根据实际需要进行修改 设置点击事件:

代码语言:javascript
复制
          photoView.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {

                @Override
                public void onPhotoTap(View arg0, float arg1, float arg2) {
                 
                }

                @Override
                public void onOutsidePhotoTap() {
                }
            });

至于adapter的话,我使用的是Adapter

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档