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

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

完成效果:


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


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


 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使用

引入依赖:

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

build.gradle中加入:

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

添加布局:

<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,代码就不贴出了,大家可根据实际需要进行修改

设置点击事件:

          photoView.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {

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

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

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


上一篇:《互联网产品设计》一2.6 用语言去解释产品


下一篇:Linux使用adb命令连接WiFi进行无线调试