/* * Copyright (C) 2015 The Android Open Source Project * * 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 android.support.v7.widget; import android.content.Context; import android.support.v4.view.NestedScrollingParent; import android.support.v4.view.ViewCompat; import android.util.Log; import android.view.View; import android.widget.FrameLayout; public class TestedFrameLayout extends FrameLayout implements NestedScrollingParent { static final int TEST_NESTED_SCROLL_MODE_IGNORE = 0; static final int TEST_NESTED_SCROLL_MODE_CONSUME = 1; private int mNestedScrollMode; private int mNestedFlingMode; private boolean mNestedStopNestedScrollCalled; public TestedFrameLayout(Context context) { super(context); } @Override public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) { // Always start nested scroll return mNestedFlingMode == TEST_NESTED_SCROLL_MODE_CONSUME || mNestedScrollMode == TEST_NESTED_SCROLL_MODE_CONSUME; } @Override public boolean onNestedPreFling(View target, float velocityX, float velocityY) { Log.d("TestedFrameLayout", "onNestedPreFling: " + mNestedFlingMode); return mNestedFlingMode == TEST_NESTED_SCROLL_MODE_CONSUME; } @Override public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) { if (mNestedScrollMode == TEST_NESTED_SCROLL_MODE_CONSUME) { // We consume all scroll deltas consumed[0] = dx; consumed[1] = dy; } } @Override public void onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) { // ignore } @Override public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) { // ignore return false; } @Override public void onNestedScrollAccepted(View child, View target, int axes) { // ignore } @Override public int getNestedScrollAxes() { // We can scroll in both direction return ViewCompat.SCROLL_AXIS_HORIZONTAL | ViewCompat.SCROLL_AXIS_VERTICAL; } @Override public void onStopNestedScroll(View target) { mNestedStopNestedScrollCalled = true; } public boolean stopNestedScrollCalled() { return mNestedStopNestedScrollCalled; } public void setNestedScrollMode(int mode) { mNestedScrollMode = mode; } public void setNestedFlingMode(int mode) { mNestedFlingMode = mode; } }