1. 程式人生 > >使用ViewPager和Photoview實現圖片左右滑動和放大縮小

使用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實現圖片滑動和放大縮小功能以及可能的注意事項。

以上如有不正確的地方,請指正,謝謝。最後附上原始碼。

原始碼下載

相關推薦

使用ViewPagerPhotoview實現圖片左右滑動放大縮小

為了實現圖片的左右滑動以及放大縮小的功能,用到了兩個元件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

使用ViewPagerPhotoView實現圖片瀏覽

一. 前言 使用photoView實現圖片的放大縮小,再使用viewPager實現圖片的左右滑動 二. 新增依賴 build.gradle (app) //photoView implementation 'co

利用FileReaderFormData實現圖片預覽上傳(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.

趙雅智_運用BitmapCanvas實現圖片顯示,縮小,旋轉,水印

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/… 最後一