如果ImageViewTouch处于缩放模式,请禁用PagerAdapter中的滑动

Hen*_*ric 2 android image-gallery

:d

我使用ImageViewTouch实现了一个库:https://github.com/sephiroth74/ImageViewZoom 这可以使用DoupleTap和其他很好的东西进行缩放,效果很好.

这些图像将添加到PagerAdapter中以启用图像之间的滑动.

但是,当图像放大时,我目前在x轴上滚动时遇到问题.如果用户放大了图像,我想禁用PageAdapters触摸监听器.

但是,如果没有缩放,或者如果图像放大并且位于图像的远端,我想再打开它.

GalleryActivity扩展了FragmentActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gallery_layout);

    GalleryAdapter galleryAdapter = new GalleryAdapter(GalleryActivity.this, images);

    // create view pager using the fragment adapter
    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
    viewPager.setAdapter(galleryAdapter);
    viewPager.setOnPageChangeListener(new PageChangeListener());
}
Run Code Online (Sandbox Code Playgroud)

我的适配器

public class GalleryAdapter extends PagerAdapter {

Matrix imageMatrix;
private Activity activity;
private ArrayList<Bitmap> images;
private LayoutInflater inflater;

// constructor
public GalleryAdapter(Activity activity, ArrayList<Bitmap> images) {
    this.activity = activity;
    this.images = images;
}

@Override
public int getCount() {
    return this.images.size();
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == ((RelativeLayout) object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    final ImageViewTouch imgDisplay;
    final Bitmap image;

    inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View viewLayout = inflater.inflate(R.layout.gallery_image,
            container, false);

    imgDisplay = (ImageViewTouch) viewLayout.findViewById(R.id.image);
    imgDisplay.setDisplayType(DisplayType.FIT_IF_BIGGER);
    imgDisplay.setVisibility(View.GONE);
    image = images.get(position);

    imgDisplay.setDoubleTapEnabled(true);

    if (null == GalleryAdapter.this.imageMatrix) {
        GalleryAdapter.this.imageMatrix = new Matrix();
    } else {
        // get the current image matrix, if we want restore the
        // previous matrix once the bitmap is changed
        imageMatrix = imgDisplay.getDisplayMatrix();
    }

    imgDisplay.setImageBitmap(image, GalleryAdapter.this.imageMatrix
            .isIdentity() ? null : GalleryAdapter.this.imageMatrix,
            ImageViewTouchBase.ZOOM_INVALID,
            ImageViewTouchBase.ZOOM_INVALID);
    imgDisplay.setVisibility(View.VISIBLE);

    viewLayout.setTag(imgDisplay);

    ((ViewPager) container).addView(viewLayout);

    return viewLayout;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    ((ViewPager) container).removeView((RelativeLayout) object);
}
Run Code Online (Sandbox Code Playgroud)

这是否有人取得了成就?

最好的问候,亨利克

car*_*go8 7

您应该使用自己的ImageView子类扩展ImageViewZoom.然后尝试这样的事情:

this.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (getScale() > 1f) {
getParent().requestDisallowInterceptTouchEvent(true);
} else {
getParent().requestDisallowInterceptTouchEvent(false);
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)

每当图像缩放/缩放超过1x时,这基本上应该禁止分页.因此,用户必须缩小才能翻页.

请参见https://github.com/sephiroth74/ImageViewZoom/issues/38