/* * Copyright (C) 2016 stfalcon.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.stfalcon.frescoimageviewer; import android.content.Context; import android.support.annotation.NonNull; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; /* * Created by Alexander Krol (troy379) on 29.08.16. */ class MultiTouchViewPager extends ViewPager { private boolean isDisallowIntercept, isScrolled = true; public MultiTouchViewPager(Context context) { super(context); setScrollStateListener(); } public MultiTouchViewPager(Context context, AttributeSet attrs) { super(context, attrs); setScrollStateListener(); } @Override public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) { isDisallowIntercept = disallowIntercept; super.requestDisallowInterceptTouchEvent(disallowIntercept); } @Override public boolean dispatchTouchEvent(@NonNull MotionEvent ev) { if (ev.getPointerCount() > 1 && isDisallowIntercept) { requestDisallowInterceptTouchEvent(false); boolean handled = super.dispatchTouchEvent(ev); requestDisallowInterceptTouchEvent(true); return handled; } else { return super.dispatchTouchEvent(ev); } } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (ev.getPointerCount() > 1) { return false; } else { try { return super.onInterceptTouchEvent(ev); } catch (IllegalArgumentException ex) { return false; } } } @Override public boolean onTouchEvent(MotionEvent ev) { try { return super.onTouchEvent(ev); } catch (IllegalArgumentException ex) { return false; } } public boolean isScrolled() { return isScrolled; } private void setScrollStateListener() { addOnPageChangeListener(new SimpleOnPageChangeListener() { @Override public void onPageScrollStateChanged(int state) { isScrolled = state == SCROLL_STATE_IDLE; } }); } }