Android圖片預覽功能(可旋轉、縮放、左右切換)
阿新 • • 發佈:2019-01-29
我們要實現的效果
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 }
到此,功能就實現了!!!!