1. 程式人生 > >Android圖片預覽功能(可旋轉、縮放、左右切換)

Android圖片預覽功能(可旋轉、縮放、左右切換)

我們要實現的效果

1、點選圖片出現預覽介面

2、可對圖片進行旋轉、縮放

3、能左右滑動,預覽其他圖片

4、單擊預覽介面後,回到上一介面

具體如下圖:

          

使用到的第三方庫

萬事俱備,就差實現了, Let ' s  go!!

一、建立一個圖片預覽 ImageBrowseActivity

佈局檔案如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width=
"match_parent" android:layout_height="match_parent" android:background="#ff171b19" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/imageBrowseViewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>

二、點選圖片開始預覽,需要通過 Intent 跳轉到 ImageBrowseActivity


1、傳遞圖片列表,因為用到Picasso,所以列表儲存的是圖片URL

2、傳遞要第一個顯示的圖片下標

private val imageList = ArrayList<String>() //圖片列表
val intent = Intent(context, ImageBrowseActivity::class.java)
intent.putStringArrayListExtra("imageList", imageList)
intent.putExtra("index", position)
context.startActivity(intent)

三、ImageBrowseActivity中的具體邏輯

1、拿到圖片列表、第一個顯示的圖片下標

if(intent.extras != null){
    index = intent.getIntExtra("index", 0)
    imageList = intent.getStringArrayListExtra("imageList")
}

2、寫一個圖片介面卡 ImageBrowseAdapter

圖片載入使用 Picasso

需要注意的幾點:

  • 圖片的 ScaleType 最好設定為 centerInside
  • 不需要使用 PhotoView 的 animFrom()、animTo() 函式,會出現一些問題
  • 可自己設定最大縮放倍數
private inner class ImageBrowseAdapter(var context: Context) : PagerAdapter() {

    override fun getCount(): Int {
        return imageList.size
}

    override fun isViewFromObject(view: View, `object`: Any): Boolean {
        return view === `object`
    }

    override fun instantiateItem(container: ViewGroup, position: Int): View {
        val image = PhotoView(context)
        // 開啟圖片縮放功能
image.enable()
        // 設定縮放型別
image.scaleType = ImageView.ScaleType.CENTER_INSIDE
// 設定最大縮放倍數
image.maxScale = 2.5f
// 載入圖片
Picasso.with(context)
                .load(imageList[position])
                .into(image)
        // 單擊圖片,返回
image.onClick {
image.disenable()
            finish()
        }
container.addView(image)
        return image
    }

    override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
        container.removeView(`object` as View)
    }
}

3、初始化 ViewPager

fun initViewPager(){
    imageBrowseViewPager.adapter = ImageBrowseAdapter(this)
    imageBrowseViewPager.currentItem = index
}

到此,功能就實現了!!!!