使用ViewPager和Photoview實現圖片左右滑動和放大縮小
為了實現圖片的左右滑動以及放大縮小的功能,用到了兩個元件ViewPager和PhotoView。
PhotoView是開源專案,它也是通過繼承ImageView然後擴充功能,實現圖片放大縮小等功能;而載入網路圖片用到了ImageLoader這個開源元件。
工欲善其事必先利其器,本案例通過Android Studio開發,所以首先需要引入包:
在Module的build.gradle檔案中新增如下兩個依賴;第一個是引入ImageLoader這個開源元件,第二個則是PhotoView。
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.4'
compile 'com.github.chrisbanes.photoview:library:1.2.3'
(Eclipse的同學就需要下載對應的jar包,將其放入lib資料夾下)
1.首先我將圖片載入在一個GridView中
GridAdapter關鍵程式碼:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
ViewHolder holder;
if(convertView == null){
holder = new ViewHolder();
view = LayoutInflater.from(mContext).inflate(mResource,null);
holder.mImageView = (ImageView) view.findViewById(R.id.img);
CSApplication.getInstance().imageLoader.displayImage(
mImgUrls.get(position),holder.mImageView, DisplayImageOptionsUtil.defaultOptions);
view.setTag(holder);
}else{
view = convertView;
holder = (ViewHolder)view.getTag();
}
return view;
}
class ViewHolder{
ImageView mImageView;
}
上面程式碼中,CSApplication類初始化了ImageLoader,並配置了引數,然後直接呼叫它的displayImage方法將圖片放入ImageView中;mImgUrls是存放圖片的url地址的列表
2.對GridView新增監聽事件,點選任意位置的圖片,然後顯示該圖片
PhotoviewActivity:顯示圖片的activity
private void setupData(){ int mCurrentUrl = getIntent().getIntExtra(MainActivity.PHOTO_POSITION,0); mImgUrls = Arrays.asList(Images.imageThumbUrls); mAdapter = new PhotoViewAdapter(); mViewPager.setAdapter(mAdapter); //設定當前需要顯示的圖片 mViewPager.setCurrentItem(mCurrentUrl); }
在ViewPager的介面卡(PhotoViewAdapter)中:
@Override public Object instantiateItem(ViewGroup container, int position) { View view = container.inflate(PhotoviewActivity.this, R.layout.item_photo_view,null); mPhotoView = (PhotoView) view.findViewById(R.id.photo); //使用ImageLoader載入圖片 CSApplication.getInstance().imageLoader.displayImage( mImgUrls.get(position),mPhotoView, DisplayImageOptionsUtil.defaultOptions); //給圖片增加點選事件 mAttacher = new PhotoViewAttacher(mPhotoView); mAttacher.setOnViewTapListener(PhotoviewActivity.this); container.addView(view); return view; }給Photoview這個元件增加點選事件的時候,使用OnClickListener不起作用,因此使用PhotoViewAttacher這個類來監聽點選事件;當點選顯示的圖片的時候,回到程式啟動之後的頁面。
這樣就可以實現圖片的左右滑動和放大縮小。但是在圖片放大縮小的時候,如果沒有重寫ViewPager的onTouchEvent和onInterceptTouchEvent這兩個方法,就會報錯。java.lang.IllegalArgumentException: pointerIndex out of range
以上就是使用ViewPager和PhotoView實現圖片滑動和放大縮小功能以及可能的注意事項。
以上如有不正確的地方,請指正,謝謝。最後附上原始碼。
相關推薦
使用ViewPager和Photoview實現圖片左右滑動和放大縮小
為了實現圖片的左右滑動以及放大縮小的功能,用到了兩個元件ViewPager和PhotoView。 PhotoView是開源專案,它也是通過繼承ImageView然後擴充功能,實現圖片放大縮小等功能;而載入網路圖片用到了ImageLoader這個開源元件。 工欲善其事必先
viewPager+photoView實現圖片輪播和手勢縮放功能 支援手勢縮放的imageView 如何實現相簿左右滑動和手勢縮放 如何讓圖片自適應控制元件大小 photoView如何使用(上)
import uk.co.senab.photoview.IPhotoView; import uk.co.senab.photoview.PhotoViewAttacher; import uk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedList
使用ViewPager和PhotoView實現圖片瀏覽
一. 前言 使用photoView實現圖片的放大縮小,再使用viewPager實現圖片的左右滑動 二. 新增依賴 build.gradle (app) //photoView implementation 'co
利用FileReader和FormData實現圖片預覽和上傳(base64轉二進位制檔案)
業務有個需求,要做圖片預覽上傳,過去都是客戶端上傳給後端,後端返回 url 前端進行預覽,現在其實可以不依賴後端做預覽,最後在上傳,這主要依賴 FileReader 和 FormData 這兩個物件和 JavaScript 處理二進位制的能力。 OK,Show cod
利用ViewPager+Fragment+actionbar實現可左右滑動的Action Tab
設定 ActionBar 的樣式,如:無回退按鍵、無標題等——setUpActionBar()初始化並設定 ViewPager,兩個要點:首先要定義並設定 ViewPager 所需要的資料控制類 ViewPagerAdapter,ViewPagerAdapter 必須實現如何返回對應位置的 Fragmen
Android Fragment+Viewpager實現左右滑動和點選 實現DrawerLayout
xml佈局程式碼: <android.support.v4.widget.DrawerLayout xmlns:android=“http://schemas.android.com/apk/res/android” xmlns:app=“http://schemas.androi
Android中Fragment+Viewpager實現左右滑動和點選
一.佈局檔案 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.view.ViewPager android:id="@+id/viewpager" andr
BottomNavigationView + ViewPager + Fragment 實現左右滑動和下方導航欄
轉載請註明出處:http://blog.csdn.net/htwhtw123/article/details/78441431 比較簡單的用BottomNavigationView 、 ViewPager 、 Fragment 實現下方導航欄與上方可翻頁頁面,
Android使用ViewPager實現圖片輪播和手勢滑動
ViewPager常用來實現圖片的輪播,比如淘寶首頁,會把一些促銷的商品的圖片和描述資訊來回的播放,這就是典型的使用ViewPager實現的。 ViewPager屬於佈局管理器,允許使用者通過頁面翻轉檢視左右的資料,下面通過一個例項來講解ViewPager實現圖片輪播和手
遮蔽ViewPager的左右滑動和切換時的滾動動畫
不詩意的女程式猿不是好廚師~ 我們經常會使用到 ViewPager+Fragment+TabLayout 這種類似的組合。 那麼各種不同的需求也就來了。 有時需要viewpager不可左右滑動,但保留切換時的滾動動畫。 有時則需要viewpa
viewpager禁用左右滑動和去掉中間的切換頁面
專案中,老闆要求viewpager不能左右滑動,和去掉中間的切換頁面(就是當點選最後一個item的時候中間的頁面也會一閃而過) 這是禁用左右滑動 mViewPager = (NoScrollViewPager) serviceView.findViewById(R.id.
趙雅智_運用Bitmap和Canvas實現圖片顯示,縮小,旋轉,水印
bitmap raw 圖形 res efault ast bmp 運用 放置 上一篇已經介紹了Android種Bitmap和Canvas的使用,以下我們來寫一個詳細實例 http://blog.csdn.net/zhaoyazhi2129/article/details
在iOS開發的Quartz2D使用中實現圖片剪切和截屏功能
ogr boa selector cgrect 如果 搭建 shu 分享 ins 原文 http://www.jb51.net/article/75671.htm 圖片剪切一、使用Quartz2D完成圖片剪切1.把圖片顯示在自定義的view中先把圖片繪制到v
django實現圖片上傳和顯示
代碼 ngs 文件路徑 ont 添加 pac pre bubuko contex 首先安裝pillow模塊 在models.py下設置 class Notices(models.Model): NoticeCategory=models.CharField(max_
AJAX實現圖片上傳和預覽(傳統ajax與jQuery AJAX;帶圖片的表單提交)
一、通過Servlet3.0和傳統的AJAX實現圖片上傳和預覽 此方法也適用於帶圖片的表單提交 上傳時預覽圖片  
小程式實現圖片預覽和長按儲存本地
主要是用到這個api wx.previewImage({ current: , // 當前顯示圖片的http連結 urls: [] // 需要預覽的圖片http連結列表 }) 頁面.wxml <image src="{{invoice.viewPath}}" dat
Base64實現圖片的編碼和解碼
前端開發中,經常會遇到base64編碼的問題,以前不是很明白,今天就去研究一下到底什麼是base64編碼。 什麼是base64編碼? 還是wiki百科上解釋的比較清楚: Base64是一種基於64個可列印字元來表示二進位制資料的表示方法。由於 2^6=64 ,所
[GAN學習系列3]採用深度學習和 TensorFlow 實現圖片修復(上)
在之前的兩篇 GAN 系列文章--[GAN學習系列1]初識GAN以及[GAN學習系列2] GAN的起源中簡單介紹了 GAN 的基本思想和原理,這次就介紹利用 GAN 來做一個圖片修復的應用,主要採用的也是 GAN 在網路結構上的升級版--DCGAN,最初始的 GAN 採用的還是神經網路,即全連線網路,而 DC
[GAN學習系列3]採用深度學習和 TensorFlow 實現圖片修復(中)
上一篇文章--[GAN學習系列3]採用深度學習和 TensorFlow 實現圖片修復(上)中,我們先介紹了對於影象修復的背景,需要利用什麼資訊來對缺失的區域進行修復,以及將影象當做概率分佈取樣的樣本來看待,通過這個思路來開始進行影象的修復。 這篇文章將繼續介紹原文的第二部分,利用對抗生成網路來快速生成假圖片
[GAN學習系列3]採用深度學習和 TensorFlow 實現圖片修復(下)
這是本文的最後一部分內容了,前兩部分內容的文章: [GAN學習系列3]採用深度學習和 TensorFlow 實現圖片修復(上) [GAN學習系列3]採用深度學習和 TensorFlow 實現圖片修復(中) 以及原文的地址: bamos.github.io/2016/08/09/… 最後一