/* * This file provided by Facebook is for non-commercial testing and evaluation * purposes only. Facebook reserves all rights not expressly granted. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package com.facebook.samples.zoomableapp; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.interfaces.DraweeController; import com.facebook.samples.zoomable.DoubleTapGestureListener; import com.facebook.samples.zoomable.ZoomableDraweeView; class MyPagerAdapter extends PagerAdapter { private static final String[] SAMPLE_URIS = { "https://www.gstatic.com/webp/gallery/1.sm.jpg", "https://www.gstatic.com/webp/gallery/2.sm.jpg", "https://www.gstatic.com/webp/gallery/3.sm.jpg", "https://www.gstatic.com/webp/gallery/4.sm.jpg", "https://www.gstatic.com/webp/gallery/5.sm.jpg", }; private final int mItemCount; private boolean mAllowSwipingWhileZoomed = true; public MyPagerAdapter(int itemCount) { mItemCount = itemCount; } public void setAllowSwipingWhileZoomed(boolean allowSwipingWhileZoomed) { mAllowSwipingWhileZoomed = allowSwipingWhileZoomed; } public boolean allowsSwipingWhileZoomed() { return mAllowSwipingWhileZoomed; } public void toggleAllowSwipingWhileZoomed() { mAllowSwipingWhileZoomed = !mAllowSwipingWhileZoomed; } @Override public Object instantiateItem(ViewGroup container, int position) { FrameLayout page = (FrameLayout) container.getChildAt(position); if (page == null) { return null; } ZoomableDraweeView zoomableDraweeView = (ZoomableDraweeView) page.findViewById(R.id.zoomableView); zoomableDraweeView.setAllowTouchInterceptionWhileZoomed(mAllowSwipingWhileZoomed); // needed for double tap to zoom zoomableDraweeView.setIsLongpressEnabled(false); zoomableDraweeView.setTapListener(new DoubleTapGestureListener(zoomableDraweeView)); DraweeController controller = Fresco.newDraweeControllerBuilder() .setUri(SAMPLE_URIS[position % SAMPLE_URIS.length]) .build(); zoomableDraweeView.setController(controller); page.requestLayout(); return page; } @Override public void destroyItem(ViewGroup container, int position, Object object) { FrameLayout page = (FrameLayout) container.getChildAt(position); ZoomableDraweeView zoomableDraweeView = (ZoomableDraweeView) page.getChildAt(0); zoomableDraweeView.setController(null); } @Override public int getCount() { return mItemCount; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public int getItemPosition(Object object) { // We want to create a new view when we call notifyDataSetChanged() to have the correct behavior return POSITION_NONE; } }