1560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell/* 2560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * Copyright (C) 2011 The Android Open Source Project 3560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 4560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * Licensed under the Apache License, Version 2.0 (the "License"); 5560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * you may not use this file except in compliance with the License. 6560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * You may obtain a copy of the License at 7560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 8560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * http://www.apache.org/licenses/LICENSE-2.0 9560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 10560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * Unless required by applicable law or agreed to in writing, software 11560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * distributed under the License is distributed on an "AS IS" BASIS, 12560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * See the License for the specific language governing permissions and 14560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * limitations under the License. 15560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell */ 16560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powellpackage android.support.v4.widget; 17560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 18560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powellimport android.content.Context; 19560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powellimport android.graphics.Canvas; 20560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powellimport android.os.Build; 21560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 22560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell/** 230574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Helper for accessing {@link android.widget.EdgeEffect} introduced after 240574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * API level 4 in a backwards compatible fashion. 25560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 260574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * This class is used to access {@link android.widget.EdgeEffect} on platform versions 270574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * that support it. When running on older platforms it will result in no-ops. It should 280574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * be used by views that wish to use the standard Android visual effects at the edges 29560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * of scrolling containers. 30560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell */ 31560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powellpublic class EdgeEffectCompat { 32560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell private Object mEdgeEffect; 33560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 34560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell private static final EdgeEffectImpl IMPL; 35560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 36560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell static { 37f5554348a132e821416ee0b2e2718045fc363c33Yigit Boyar if (Build.VERSION.SDK_INT >= 21) { 38f5554348a132e821416ee0b2e2718045fc363c33Yigit Boyar IMPL = new EdgeEffectLollipopImpl(); // Lollipop 39f5554348a132e821416ee0b2e2718045fc363c33Yigit Boyar } else if (Build.VERSION.SDK_INT >= 14) { // ICS 40560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell IMPL = new EdgeEffectIcsImpl(); 41560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } else { 42560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell IMPL = new BaseEdgeEffectImpl(); 43560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 44560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 45560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 46560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell interface EdgeEffectImpl { 47560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public Object newEdgeEffect(Context context); 48560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public void setSize(Object edgeEffect, int width, int height); 49560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean isFinished(Object edgeEffect); 50560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public void finish(Object edgeEffect); 51560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean onPull(Object edgeEffect, float deltaDistance); 52560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean onRelease(Object edgeEffect); 53560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean onAbsorb(Object edgeEffect, int velocity); 54560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean draw(Object edgeEffect, Canvas canvas); 551fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell public boolean onPull(Object edgeEffect, float deltaDistance, float displacement); 56560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 57560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 58560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell /** 59560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * Null implementation to use pre-ICS 60560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell */ 61560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell static class BaseEdgeEffectImpl implements EdgeEffectImpl { 62560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public Object newEdgeEffect(Context context) { 63560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return null; 64560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 65560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 66560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public void setSize(Object edgeEffect, int width, int height) { 67560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 68560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 69560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean isFinished(Object edgeEffect) { 70560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return true; 71560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 72560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 73560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public void finish(Object edgeEffect) { 74560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 75560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 76560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean onPull(Object edgeEffect, float deltaDistance) { 77560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return false; 78560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 79560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 80560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean onRelease(Object edgeEffect) { 81560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return false; 82560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 83560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 84560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean onAbsorb(Object edgeEffect, int velocity) { 85560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return false; 86560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 87560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 88560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean draw(Object edgeEffect, Canvas canvas) { 89560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return false; 90560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 911fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell 921fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell public boolean onPull(Object edgeEffect, float deltaDistance, float displacement) { 931fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell return false; 941fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell } 95560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 96560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 97560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell static class EdgeEffectIcsImpl implements EdgeEffectImpl { 98560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public Object newEdgeEffect(Context context) { 99560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return EdgeEffectCompatIcs.newEdgeEffect(context); 100560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 101560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 102560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public void setSize(Object edgeEffect, int width, int height) { 103560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell EdgeEffectCompatIcs.setSize(edgeEffect, width, height); 104560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 105560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 106560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean isFinished(Object edgeEffect) { 107560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return EdgeEffectCompatIcs.isFinished(edgeEffect); 108560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 109560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 110560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public void finish(Object edgeEffect) { 111560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell EdgeEffectCompatIcs.finish(edgeEffect); 112560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 113560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 114560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean onPull(Object edgeEffect, float deltaDistance) { 115560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return EdgeEffectCompatIcs.onPull(edgeEffect, deltaDistance); 116560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 117560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 118560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean onRelease(Object edgeEffect) { 119560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return EdgeEffectCompatIcs.onRelease(edgeEffect); 120560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 121560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 122560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean onAbsorb(Object edgeEffect, int velocity) { 123560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return EdgeEffectCompatIcs.onAbsorb(edgeEffect, velocity); 124560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 125560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 126560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean draw(Object edgeEffect, Canvas canvas) { 127560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return EdgeEffectCompatIcs.draw(edgeEffect, canvas); 128560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 1291fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell 1301fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell public boolean onPull(Object edgeEffect, float deltaDistance, float displacement) { 1311fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell return EdgeEffectCompatIcs.onPull(edgeEffect, deltaDistance); 1321fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell } 1331fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell } 1341fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell 1351fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell static class EdgeEffectLollipopImpl extends EdgeEffectIcsImpl { 1361fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell public boolean onPull(Object edgeEffect, float deltaDistance, float displacement) { 1371fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell return EdgeEffectCompatLollipop.onPull(edgeEffect, deltaDistance, displacement); 1381fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell } 139560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 140560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 141560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell /** 142560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * Construct a new EdgeEffect themed using the given context. 143560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 144560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * <p>Note: On platform versions that do not support EdgeEffect, all operations 145560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * on the newly constructed object will be mocked/no-ops.</p> 146560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 147560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * @param context Context to use for theming the effect 148560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell */ 149560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public EdgeEffectCompat(Context context) { 150560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell mEdgeEffect = IMPL.newEdgeEffect(context); 151560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 152560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 153560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell /** 154560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * Set the size of this edge effect in pixels. 155560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 156560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * @param width Effect width in pixels 157560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * @param height Effect height in pixels 158560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell */ 159560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public void setSize(int width, int height) { 160560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell IMPL.setSize(mEdgeEffect, width, height); 161560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 162560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 163560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell /** 164560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * Reports if this EdgeEffectCompat's animation is finished. If this method returns false 165560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * after a call to {@link #draw(Canvas)} the host widget should schedule another 166560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * drawing pass to continue the animation. 167560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 168560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * @return true if animation is finished, false if drawing should continue on the next frame. 169560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell */ 170560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean isFinished() { 171560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return IMPL.isFinished(mEdgeEffect); 172560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 173560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 174560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell /** 175560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * Immediately finish the current animation. 176560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * After this call {@link #isFinished()} will return true. 177560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell */ 178560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public void finish() { 179560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell IMPL.finish(mEdgeEffect); 180560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 181560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 182560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell /** 183560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * A view should call this when content is pulled away from an edge by the user. 184560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * This will update the state of the current visual effect and its associated animation. 185560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * The host view should always {@link android.view.View#invalidate()} if this method 186560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * returns true and draw the results accordingly. 187560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 188560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * @param deltaDistance Change in distance since the last call. Values may be 0 (no change) to 189560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 1.f (full length of the view) or negative values to express change 190560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * back toward the edge reached to initiate the effect. 191560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * @return true if the host view should call invalidate, false if it should not. 1921fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell * @deprecated use {@link #onPull(float, float)} 193560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell */ 194560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean onPull(float deltaDistance) { 195560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return IMPL.onPull(mEdgeEffect, deltaDistance); 196560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 197560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 198560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell /** 1991fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell * A view should call this when content is pulled away from an edge by the user. 2001fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell * This will update the state of the current visual effect and its associated animation. 2011fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell * The host view should always {@link android.view.View#invalidate()} if this method 2021fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell * returns true and draw the results accordingly. 2031fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell * 2041fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell * @param deltaDistance Change in distance since the last call. Values may be 0 (no change) to 2051fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell * 1.f (full length of the view) or negative values to express change 2061fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell * back toward the edge reached to initiate the effect. 2071fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell * @param displacement The displacement from the starting side of the effect of the point 2081fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell * initiating the pull. In the case of touch this is the finger position. 2091fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell * Values may be from 0-1. 2101fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell * @return true if the host view should call invalidate, false if it should not. 2111fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell */ 2121fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell public boolean onPull(float deltaDistance, float displacement) { 2131fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell return IMPL.onPull(mEdgeEffect, deltaDistance, displacement); 2141fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell } 2151fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell 2161fcce4485ef99aca928ebfb877859c5ecd47716cAdam Powell /** 217560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * Call when the object is released after being pulled. 218560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * This will begin the "decay" phase of the effect. After calling this method 219560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * the host view should {@link android.view.View#invalidate()} if this method 220560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * returns true and thereby draw the results accordingly. 221560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 222560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * @return true if the host view should invalidate, false if it should not. 223560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell */ 224560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean onRelease() { 225560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return IMPL.onRelease(mEdgeEffect); 226560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 227560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 228560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell /** 229560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * Call when the effect absorbs an impact at the given velocity. 230560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * Used when a fling reaches the scroll boundary. 231560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 232560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * <p>When using a {@link android.widget.Scroller} or {@link android.widget.OverScroller}, 233560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * the method <code>getCurrVelocity</code> will provide a reasonable approximation 234560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * to use here.</p> 235560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 236560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * @param velocity Velocity at impact in pixels per second. 237560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * @return true if the host view should invalidate, false if it should not. 238560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell */ 239560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean onAbsorb(int velocity) { 240560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return IMPL.onAbsorb(mEdgeEffect, velocity); 241560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 242560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell 243560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell /** 244560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * Draw into the provided canvas. Assumes that the canvas has been rotated 245560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * accordingly and the size has been set. The effect will be drawn the full 246560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * width of X=0 to X=width, beginning from Y=0 and extending to some factor < 247560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 1.f of height. 248560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * 249560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * @param canvas Canvas to draw into 250560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * @return true if drawing should continue beyond this frame to continue the 251560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell * animation 252560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell */ 253560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell public boolean draw(Canvas canvas) { 254560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell return IMPL.draw(mEdgeEffect, canvas); 255560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell } 256560114f591be31d0fb73c26a1ee1cc0a15184abaAdam Powell} 257