1eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn/* 2eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Copyright (C) 2011 The Android Open Source Project 3eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * 4eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * you may not use this file except in compliance with the License. 6eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * You may obtain a copy of the License at 7eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * 8eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * 10eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 11eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * See the License for the specific language governing permissions and 14eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * limitations under the License. 15eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 16eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 17eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackbornpackage android.support.v4.view; 18eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 19eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackbornimport android.view.MotionEvent; 20eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 21eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn/** 220574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * Helper for accessing features in {@link MotionEvent} introduced 230574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * after API level 4 in a backwards compatible fashion. 24eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 25eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackbornpublic class MotionEventCompat { 26eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 27eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Interface for the full API. 28eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 29eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn interface MotionEventVersionImpl { 30eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public int findPointerIndex(MotionEvent event, int pointerId); 31eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public int getPointerId(MotionEvent event, int pointerIndex); 32eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public float getX(MotionEvent event, int pointerIndex); 33eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public float getY(MotionEvent event, int pointerIndex); 341ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell public int getPointerCount(MotionEvent event); 35eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 36eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 37eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 38eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Interface implementation that doesn't use anything about v4 APIs. 39eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 40eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn static class BaseMotionEventVersionImpl implements MotionEventVersionImpl { 41eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn @Override 42eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public int findPointerIndex(MotionEvent event, int pointerId) { 434fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell if (pointerId == 0) { 444fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell // id 0 == index 0 and vice versa. 454fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell return 0; 464fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell } 47eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn return -1; 48eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 49eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn @Override 50eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public int getPointerId(MotionEvent event, int pointerIndex) { 514fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell if (pointerIndex == 0) { 524fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell // index 0 == id 0 and vice versa. 534fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell return 0; 544fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell } 554fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell throw new IndexOutOfBoundsException("Pre-Eclair does not support multiple pointers"); 56eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 57eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn @Override 58eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public float getX(MotionEvent event, int pointerIndex) { 594fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell if (pointerIndex == 0) { 604fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell return event.getX(); 614fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell } 624fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell throw new IndexOutOfBoundsException("Pre-Eclair does not support multiple pointers"); 63eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 64eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn @Override 65eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public float getY(MotionEvent event, int pointerIndex) { 664fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell if (pointerIndex == 0) { 674fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell return event.getY(); 684fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell } 694fb2aa8fb492e12ed48daa4f025e0bfac00a2514Adam Powell throw new IndexOutOfBoundsException("Pre-Eclair does not support multiple pointers"); 70eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 711ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell @Override 721ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell public int getPointerCount(MotionEvent event) { 731ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell return 1; 741ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell } 75eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 76eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 77eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 78eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Interface implementation for devices with at least v11 APIs. 79eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 80eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn static class EclairMotionEventVersionImpl implements MotionEventVersionImpl { 81eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn @Override 82eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public int findPointerIndex(MotionEvent event, int pointerId) { 83eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn return MotionEventCompatEclair.findPointerIndex(event, pointerId); 84eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 85eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn @Override 86eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public int getPointerId(MotionEvent event, int pointerIndex) { 87eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn return MotionEventCompatEclair.getPointerId(event, pointerIndex); 88eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 89eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn @Override 90eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public float getX(MotionEvent event, int pointerIndex) { 91eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn return MotionEventCompatEclair.getX(event, pointerIndex); 92eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 93eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn @Override 94eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public float getY(MotionEvent event, int pointerIndex) { 95eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn return MotionEventCompatEclair.getY(event, pointerIndex); 96eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 971ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell @Override 981ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell public int getPointerCount(MotionEvent event) { 991ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell return MotionEventCompatEclair.getPointerCount(event); 1001ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell } 101eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 102eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 103eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 104eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Select the correct implementation to use for the current platform. 105eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 106eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn static final MotionEventVersionImpl IMPL; 107eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn static { 108eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn if (android.os.Build.VERSION.SDK_INT >= 5) { 109eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn IMPL = new EclairMotionEventVersionImpl(); 110eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } else { 111eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn IMPL = new BaseMotionEventVersionImpl(); 112eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 113eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 114eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 115eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn // ------------------------------------------------------------------- 116eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 117eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 118eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Synonym for {@link MotionEvent#ACTION_MASK}. 119eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 120eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public static final int ACTION_MASK = 0xff; 121eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 122eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 123eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Synonym for {@link MotionEvent#ACTION_POINTER_DOWN}. 124eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 125eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public static final int ACTION_POINTER_DOWN = 5; 126eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 127eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 128eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Synonym for {@link MotionEvent#ACTION_POINTER_UP}. 129eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 130eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public static final int ACTION_POINTER_UP = 6; 131eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 132eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 133eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Synonym for {@link MotionEvent#ACTION_HOVER_MOVE}. 134eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 135eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public static final int ACTION_HOVER_MOVE = 7; 136eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 137eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 138eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Synonym for {@link MotionEvent#ACTION_SCROLL}. 139eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 140eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public static final int ACTION_SCROLL = 8; 141eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 142eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 143eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Synonym for {@link MotionEvent#ACTION_POINTER_INDEX_MASK}. 144eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 145eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public static final int ACTION_POINTER_INDEX_MASK = 0xff00; 146eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 147eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 148eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Synonym for {@link MotionEvent#ACTION_POINTER_INDEX_SHIFT}. 149eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 150eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public static final int ACTION_POINTER_INDEX_SHIFT = 8; 151eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 152eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 153dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * Constant for {@link #getActionMasked}: The pointer is not down but has entered the 154dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * boundaries of a window or view. 155dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * <p> 156dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * This action is always delivered to the window or view under the pointer. 157dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * </p><p> 158dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * This action is not a touch event so it is delivered to 159e350edbd81af058201ac1b5dbe6631dafaffdadbSvetoslav Ganov * {@link android.view.View#onGenericMotionEvent(MotionEvent)} rather than 160e350edbd81af058201ac1b5dbe6631dafaffdadbSvetoslav Ganov * {@link android.view.View#onTouchEvent(MotionEvent)}. 161dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * </p> 162dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov */ 163dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov public static final int ACTION_HOVER_ENTER = 9; 164dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov 165dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov /** 166dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * Constant for {@link #getActionMasked}: The pointer is not down but has exited the 167dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * boundaries of a window or view. 168dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * <p> 169dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * This action is always delivered to the window or view that was previously under the pointer. 170dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * </p><p> 171dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * This action is not a touch event so it is delivered to 172e350edbd81af058201ac1b5dbe6631dafaffdadbSvetoslav Ganov * {@link android.view.View#onGenericMotionEvent(MotionEvent)} rather than 173e350edbd81af058201ac1b5dbe6631dafaffdadbSvetoslav Ganov * {@link android.view.View#onTouchEvent(MotionEvent)}. 174dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov * </p> 175dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov */ 176dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov public static final int ACTION_HOVER_EXIT = 10; 177dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov 178dc5487a46b75572fa9120b22e89487c0178ff0a0Svetoslav Ganov /** 179eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Call {@link MotionEvent#getAction}, returning only the {@link #ACTION_MASK} 180eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * portion. 181eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 182eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public static int getActionMasked(MotionEvent event) { 183eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn return event.getAction() & ACTION_MASK; 184eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 185eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 186eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 187eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Call {@link MotionEvent#getAction}, returning only the pointer index 188eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * portion 189eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 190eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public static int getActionIndex(MotionEvent event) { 191eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn return (event.getAction() & ACTION_POINTER_INDEX_MASK) 192eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn >> ACTION_POINTER_INDEX_SHIFT; 193eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 194eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 195eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 196eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Call {@link MotionEvent#findPointerIndex(int)}. 1970574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * If running on a pre-{@link android.os.Build.VERSION_CODES#ECLAIR} device, 198eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * does nothing and returns -1. 199eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 200eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public static int findPointerIndex(MotionEvent event, int pointerId) { 201eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn return IMPL.findPointerIndex(event, pointerId); 202eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 203eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 204eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 205eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Call {@link MotionEvent#getPointerId(int)}. 2060574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * If running on a pre-{@link android.os.Build.VERSION_CODES#ECLAIR} device, 207eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * {@link IndexOutOfBoundsException} is thrown. 208eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 209eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public static int getPointerId(MotionEvent event, int pointerIndex) { 210eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn return IMPL.getPointerId(event, pointerIndex); 211eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 212eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 213eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 214eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Call {@link MotionEvent#getX(int)}. 2150574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * If running on a pre-{@link android.os.Build.VERSION_CODES#ECLAIR} device, 216eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * {@link IndexOutOfBoundsException} is thrown. 217eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 218eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public static float getX(MotionEvent event, int pointerIndex) { 219eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn return IMPL.getX(event, pointerIndex); 220eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 221eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn 222eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn /** 223eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * Call {@link MotionEvent#getY(int)}. 2240574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * If running on a pre-{@link android.os.Build.VERSION_CODES#ECLAIR} device, 225eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn * {@link IndexOutOfBoundsException} is thrown. 226eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn */ 227eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn public static float getY(MotionEvent event, int pointerIndex) { 228eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn return IMPL.getY(event, pointerIndex); 229eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn } 2301ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell 2311ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell /** 2321ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell * The number of pointers of data contained in this event. Always 2331ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell * >= 1. 2341ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell */ 2351ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell public static int getPointerCount(MotionEvent event) { 2361ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell return IMPL.getPointerCount(event); 2371ce805e30800bf2852fa5421b7277a18e089ee31Adam Powell } 238eedc67283a5a49dce86c625e54596dfdea9465a7Dianne Hackborn} 239