Skip to content
This repository has been archived by the owner on Aug 22, 2023. It is now read-only.

Commit

Permalink
Disable ViewPager when photo viewer zoomed in
Browse files Browse the repository at this point in the history
Work around common limitation with GestureImageView when using with
ViewPager.

Requires some modifications to GestureImageView outlined at
jasonpolites/gesture-imageview#30
  • Loading branch information
brk3 committed Sep 24, 2012
1 parent 9d4d889 commit 139f80f
Show file tree
Hide file tree
Showing 7 changed files with 86 additions and 23 deletions.
Binary file removed libs/gesture-imageview-6074916f.jar
Binary file not shown.
Binary file added libs/gesture-imageview-c2e7e16f.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion res/layout/photoviewer.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<android.support.v4.view.ViewPager
<com.bourke.glimmr.common.ViewPagerDisable
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
Expand Down
16 changes: 11 additions & 5 deletions src/com/bourke/glimmr/activities/PhotoViewerActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,11 @@
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import com.bourke.glimmr.common.ViewPagerDisable;

import android.util.Log;

import com.bourke.glimmr.common.Constants;
import com.bourke.glimmr.event.Events.IOverlayVisbilityListener;
import com.bourke.glimmr.fragments.viewer.PhotoViewerFragment;
import com.bourke.glimmr.R;

Expand All @@ -26,6 +25,7 @@
import java.util.ArrayList;
import java.util.List;
import com.googlecode.flickrjandroid.people.User;
import android.support.v4.view.ViewPager;

/**
* Activity for viewing photos.
Expand All @@ -34,14 +34,15 @@
* a startIndex in a zoomable ImageView.
*/
public class PhotoViewerActivity extends BaseActivity
implements ViewPager.OnPageChangeListener, IOverlayVisbilityListener {
implements ViewPager.OnPageChangeListener,
PhotoViewerFragment.IPhotoViewerCallbacks {

private static final String TAG = "Glimmr/PhotoViewerActivity";

private List<Photo> mPhotos = new ArrayList<Photo>();

private PhotoViewerPagerAdapter mAdapter;
private ViewPager mPager;
private ViewPagerDisable mPager;
private List<WeakReference<Fragment>> mFragList =
new ArrayList<WeakReference<Fragment>>();

Expand Down Expand Up @@ -72,7 +73,7 @@ private void handleIntent(Intent intent) {
}
mAdapter =
new PhotoViewerPagerAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager = (ViewPagerDisable) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
/* Don't show the PageIndicator if there's a lot of items */
if (mPhotos.size() <= Constants.LINE_PAGE_INDICATOR_LIMIT) {
Expand Down Expand Up @@ -128,6 +129,11 @@ public void onVisibilityChanged() {
}
}

@Override
public void onZoomed(boolean isZoomed) {
mPager.setPagingEnabled(!isZoomed);
}

class PhotoViewerPagerAdapter extends FragmentStatePagerAdapter {
public PhotoViewerPagerAdapter(FragmentManager fm) {
super(fm);
Expand Down
42 changes: 42 additions & 0 deletions src/com/bourke/glimmr/common/ViewPagerDisable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.bourke.glimmr.common;

import android.content.Context;

import android.support.v4.view.ViewPager;

import android.util.AttributeSet;

import android.view.MotionEvent;

/**
* Extend ViewPager to allow the paging to be disabled/mEnabled.
*/
public class ViewPagerDisable extends ViewPager {

private boolean mEnabled;

public ViewPagerDisable(Context context, AttributeSet attrs) {
super(context, attrs);
mEnabled = true;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
if (mEnabled) {
return super.onTouchEvent(event);
}
return false;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (mEnabled) {
return super.onInterceptTouchEvent(event);
}
return false;
}

public void setPagingEnabled(boolean enabled) {
mEnabled = enabled;
}
}
4 changes: 0 additions & 4 deletions src/com/bourke/glimmr/event/Events.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,4 @@ public interface IPhotoInfoReadyListener {
public interface ICommentAddedListener {
void onCommentAdded(String commentId);
}

public interface IOverlayVisbilityListener {
void onVisibilityChanged();
}
}
45 changes: 32 additions & 13 deletions src/com/bourke/glimmr/fragments/viewer/PhotoViewerFragment.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.bourke.glimmr.fragments.viewer;

import com.bourke.glimmr.activities.PhotoViewerActivity;
import com.actionbarsherlock.widget.ShareActionProvider;
import com.polites.android.GestureImageView;
import android.content.Intent;

import android.os.Bundle;
Expand All @@ -23,7 +25,6 @@
import com.bourke.glimmr.activities.ExifInfoDialogActivity;
import com.bourke.glimmr.common.Constants;
import com.bourke.glimmr.event.Events.IFavoriteReadyListener;
import com.bourke.glimmr.event.Events.IOverlayVisbilityListener;
import com.bourke.glimmr.event.Events.IPhotoInfoReadyListener;
import com.bourke.glimmr.fragments.base.BaseFragment;
import com.bourke.glimmr.fragments.viewer.PhotoViewerFragment;
Expand All @@ -34,6 +35,7 @@
import com.googlecode.flickrjandroid.photos.Photo;

import java.util.concurrent.atomic.AtomicBoolean;
import android.view.MotionEvent;

public final class PhotoViewerFragment extends BaseFragment
implements IPhotoInfoReadyListener, IFavoriteReadyListener {
Expand All @@ -46,15 +48,15 @@ public final class PhotoViewerFragment extends BaseFragment
private MenuItem mFavoriteButton;
private LoadPhotoInfoTask mTask;
private AtomicBoolean mIsFavoriting = new AtomicBoolean(false);
private IOverlayVisbilityListener mVisibilityListener;
private IPhotoViewerCallbacks mListener;

public static PhotoViewerFragment newInstance(Photo photo,
IOverlayVisbilityListener visiblityListener) {
IPhotoViewerCallbacks listener) {
if (Constants.DEBUG)
Log.d("Glimmr/PhotoViewerFragment", "newInstance");
PhotoViewerFragment photoFragment = new PhotoViewerFragment();
photoFragment.mBasePhoto = photo;
photoFragment.mVisibilityListener = visiblityListener;
photoFragment.mListener = listener;
return photoFragment;
}

Expand All @@ -71,16 +73,28 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
mLayout = (RelativeLayout) inflater.inflate(
R.layout.photoviewer_fragment, container, false);
mAq = new AQuery(mActivity, mLayout);
mAq.id(R.id.image).clicked(
new View.OnClickListener() {
@Override
public void onClick(View v) {
/* Set our own visiblity and update others */
setOverlayVisibility(mActionBar.isShowing());
mVisibilityListener.onVisibilityChanged();
}
});

mAq.id(R.id.image).clicked(new View.OnClickListener() {
@Override
public void onClick(View v) {
/* Set our own visiblity and update others */
setOverlayVisibility(mActionBar.isShowing());
mListener.onVisibilityChanged();
}
});

final GestureImageView i =
(GestureImageView) mLayout.findViewById(R.id.image);
i.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mListener.onZoomed(i.isZoomed());
return false;
}
});

refreshOverlayVisibility();

return mLayout;
}

Expand Down Expand Up @@ -320,4 +334,9 @@ public void refreshOverlayVisibility() {
protected String getLogTag() {
return TAG;
}

public interface IPhotoViewerCallbacks {
void onVisibilityChanged();
void onZoomed(boolean isZoomed);
}
}

0 comments on commit 139f80f

Please sign in to comment.