1. 程式人生 > >ImageViewer:打造萬能圖片瀏覽器,輕鬆實現微信朋友圈、今日頭條、橫向列表、縱向列表等圖片瀏覽效果

ImageViewer:打造萬能圖片瀏覽器,輕鬆實現微信朋友圈、今日頭條、橫向列表、縱向列表等圖片瀏覽效果

ImageViewer

關於

圖片預覽器,支援圖片手勢縮放、拖拽等操作,自定義View的模式顯示,自定義圖片載入方式,更加靈活,易於擴充套件,同時也適用於RecyclerView、ListView的橫向和縱向列表模式,最低支援版本為Android 3.0及以上…

功能

  • 圖片的基本縮放、滑動
  • 微信朋友圈圖片放大預覽
  • 微信朋友圈圖片拖拽效果
  • 今日頭條圖片拖拽效果
  • 圖片載入進度條

傳送門

推薦

  • AutoGridView 宮格控制元件,QQ空間九宮格、普通宮格模式、點選新增照片…

專案演示

這裡寫圖片描述這裡寫圖片描述這裡寫圖片描述這裡寫圖片描述這裡寫圖片描述

apk體驗

點我

自定義屬性

屬性名 描述
ivr_show_index 是否顯示圖片位置
ivr_do_enter 是否開啟進場動畫
ivr_do_exit 是否開啟退場動畫
ivr_duration 進場與退場動畫的執行時間
ivr_do_drag 是否允許圖片拖拽
ivr_drag_type 拖拽模式(classic:今日頭條效果

自定義方法

方法名 描述
setStartPosition(int position) 設定開始展示的圖片的位置
setImageData(List list) 設定圖片資源
setViewData(List list) 設定目標 view 的相關資料
setImageLoader(ImageLoader loader) 設定圖片載入類
showIndex(boolean show) 是否顯示圖片索引
doDrag(boolean isDo) 是否允許圖片被拖拽
setDragType(@ImageDraggerType int type) 設定拖拽模式
doEnterAnim(boolean isDo) 是否開啟進場動畫
doExitAnim(boolean isDo) 是否開啟退場動畫
setDuration(int duration) 設定開啟和關閉的動畫執行時間
setOnImageChangedListener(OnImageChangedListener listener) 設定圖片切換監聽
setOnItemClickListener(OnItemClickListener listener) 設定圖片的單擊擊監聽
setOnItemLongClickListener(OnItemLongClickListener listener) 設定圖片的長按擊監聽
setOnPreviewStatusListener(OnPreviewStatusListener listener) 設定圖片預覽狀態監聽
watch() 開啟圖片預覽
close() 關閉圖片預覽
clear() 清除所有資料
getViewState() 獲取圖片預覽器的當前狀態
setImageScaleable(boolean scaleable) 是否允許圖片縮放
isImageScaleable() 圖片是否可縮放
getImageScale() 獲取圖片當前的縮放等級
setImageMaxScale 設定圖片的最大縮放等級
getImageMaxScale() 獲取圖片的最大縮放等級
setImageMinScale(float minScale) 設定圖片的最小縮放等級
getImageMinScale() 獲取圖片的最小縮放等級
getCurrentView() 獲取當前 Item 的檢視
getCurrentPosition() 獲取當前圖片的位置
onKeyDown(int keyCode, KeyEvent event) 返回鍵監聽(使用方法見demo)

新增依賴

  • Gradle
   Step 1:

   allprojects {
       repositories {
           ...
           // 此句maven是為因為專案中使用了jitpack上的開源專案PhotoView
           maven { url 'https://jitpack.io' }
           // 如果新增依賴時,報找不到專案時(專案正在稽核),可以新增此句maven地址,如果找到專案,可不必新增
           maven { url "https://dl.bintray.com/albertlii/android-maven/" }
       }
    }


   Step 2:
   dependencies {
       compile 'com.liyi.view:image-viewer:2.1.2'
   }
  • Maven
   <dependency>
      <groupId>com.liyi.view</groupId>
      <artifactId>image-viewer</artifactId>
      <version>2.1.2</version>
      <type>pom</type>
   </dependency>

簡單例項

XML 中新增 ImageViewer

  <com.liyi.viewer.widget.ImageViewer
        android:id="@+id/imagePreivew"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

程式碼中設定 ImageViewer

  // 圖片瀏覽的起始位置
  imageViewer.setStartPosition(position);
  // 圖片的資料來源
  imageViewer.setImageData(mImageList);
  // 目標 View 的位置以及尺寸等資訊
  imageViewer.setViewData(mViewDatas);
  // 自定義圖片的載入方式
  imageViewer.setImageLoader(new ImageLoader() {
        @Override
        public void displayImage(final int position, Object src, final ImageView view) {
               Glide.with(SimplePreviewActivity.this)
                    .load(src)
                    .into(new SimpleTarget<Drawable>() {
                          @Override
                          public void onLoadStarted(@Nullable Drawable placeholder) {
                                 super.onLoadStarted(placeholder);
                                 view.setImageDrawable(placeholder);
                          }

                          @Override
                          public void onLoadFailed(@Nullable Drawable errorDrawable) {
                                 super.onLoadFailed(errorDrawable);
                                 view.setImageDrawable(errorDrawable);
                          }

                          @Override
                          public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) {
                                 view.setImageDrawable(resource);
                                 mViewDatas.get(position).setImageWidth(resource.getIntrinsicWidth());
                                 mViewDatas.get(position).setImageHeight(resource.getIntrinsicHeight());
                          }
                     });
   }});
   // 開啟圖片瀏覽
   imageViewer.watch();

超巨圖解決方案(進退場動畫需重寫,且不支援微信朋友圈拖拽,今日頭條效果仍然支援)

github傳送門