Touch.java revision ab9289320f598509cf358523ba173d69178a55ea
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.text.method; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.Layout; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.NoCopySpan; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.Layout.Alignment; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.Spannable; 2327d377221c7970a5205c83f8a9f62f755dc1fa5dDianne Hackbornimport android.util.Log; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.MotionEvent; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.ViewConfiguration; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.TextView; 27ab9289320f598509cf358523ba173d69178a55eaMaryam Garrettimport android.view.KeyEvent; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Touch { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Touch() { } 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Scrolls the specified widget to the specified coordinates, except 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * constrains the X scrolling position to the horizontal regions of 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the text that will be visible after scrolling to the specified 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Y position. 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static void scrollTo(TextView widget, Layout layout, int x, int y) { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int padding = widget.getTotalPaddingTop() + 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project widget.getTotalPaddingBottom(); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int top = layout.getLineForVertical(y); 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int bottom = layout.getLineForVertical(y + widget.getHeight() - 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project padding); 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int left = Integer.MAX_VALUE; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int right = 0; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Alignment a = null; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = top; i <= bottom; i++) { 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = (int) Math.min(left, layout.getLineLeft(i)); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right = (int) Math.max(right, layout.getLineRight(i)); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (a == null) { 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a = layout.getParagraphAlignment(i); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project padding = widget.getTotalPaddingLeft() + widget.getTotalPaddingRight(); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int width = widget.getWidth(); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int diff = 0; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (right - left < width - padding) { 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (a == Alignment.ALIGN_CENTER) { 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project diff = (width - padding - (right - left)) / 2; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (a == Alignment.ALIGN_OPPOSITE) { 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project diff = width - padding - (right - left); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project x = Math.min(x, right - (width - padding) - diff); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project x = Math.max(x, left - diff); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project widget.scrollTo(x, y); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 77eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark * @hide 78eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark * Returns the maximum scroll value in x. 79eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark */ 80eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark public static int getMaxScrollX(TextView widget, Layout layout, int y) { 81eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark int top = layout.getLineForVertical(y); 82eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark int bottom = layout.getLineForVertical(y + widget.getHeight() 83eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark - widget.getTotalPaddingTop() -widget.getTotalPaddingBottom()); 84eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark int left = Integer.MAX_VALUE; 85eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark int right = 0; 86eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark for (int i = top; i <= bottom; i++) { 87eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark left = (int) Math.min(left, layout.getLineLeft(i)); 88eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark right = (int) Math.max(right, layout.getLineRight(i)); 89eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark } 90eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark return right - left - widget.getWidth() - widget.getTotalPaddingLeft() 91eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark - widget.getTotalPaddingRight(); 92eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark } 93eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark 94eaa18dec91b6dd0ce3191a9ab65cdc95ef68b935Cary Clark /** 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Handles touch events for dragging. You may want to do other actions 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * like moving the cursor on touch as well. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean onTouchEvent(TextView widget, Spannable buffer, 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MotionEvent event) { 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DragState[] ds; 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (event.getAction()) { 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MotionEvent.ACTION_DOWN: 10458b971d733a2c700cabd3db02b6ea4d5faca6939Eric Fischer ds = buffer.getSpans(0, buffer.length(), DragState.class); 10558b971d733a2c700cabd3db02b6ea4d5faca6939Eric Fischer 10658b971d733a2c700cabd3db02b6ea4d5faca6939Eric Fischer for (int i = 0; i < ds.length; i++) { 10758b971d733a2c700cabd3db02b6ea4d5faca6939Eric Fischer buffer.removeSpan(ds[i]); 10858b971d733a2c700cabd3db02b6ea4d5faca6939Eric Fischer } 10958b971d733a2c700cabd3db02b6ea4d5faca6939Eric Fischer 11038e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn buffer.setSpan(new DragState(event.getX(), event.getY(), 11138e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn widget.getScrollX(), widget.getScrollY()), 11238e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn 0, 0, Spannable.SPAN_MARK_MARK); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MotionEvent.ACTION_UP: 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ds = buffer.getSpans(0, buffer.length(), DragState.class); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < ds.length; i++) { 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer.removeSpan(ds[i]); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ds.length > 0 && ds[0].mUsed) { 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MotionEvent.ACTION_MOVE: 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ds = buffer.getSpans(0, buffer.length(), DragState.class); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ds.length > 0) { 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ds[0].mFarEnough == false) { 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int slop = ViewConfiguration.get(widget.getContext()).getScaledTouchSlop(); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (Math.abs(event.getX() - ds[0].mX) >= slop || 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Math.abs(event.getY() - ds[0].mY) >= slop) { 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ds[0].mFarEnough = true; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ds[0].mFarEnough) { 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ds[0].mUsed = true; 143ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett boolean cap = (MetaKeyKeyListener.getMetaState(buffer, 144ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett KeyEvent.META_SHIFT_ON) == 1) || 145ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett (MetaKeyKeyListener.getMetaState(buffer, 146ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett MetaKeyKeyListener.META_SELECTING) != 0); 147ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett float dx; 148ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett float dy; 149ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett if (cap) { 150ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett // if we're selecting, we want the scroll to go in 151ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett // the direction of the drag 152ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett dx = event.getX() - ds[0].mX; 153ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett dy = event.getY() - ds[0].mY; 154ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett } else { 155ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett dx = ds[0].mX - event.getX(); 156ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett dy = ds[0].mY - event.getY(); 157ab9289320f598509cf358523ba173d69178a55eaMaryam Garrett } 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ds[0].mX = event.getX(); 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ds[0].mY = event.getY(); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int nx = widget.getScrollX() + (int) dx; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int ny = widget.getScrollY() + (int) dy; 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int padding = widget.getTotalPaddingTop() + 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project widget.getTotalPaddingBottom(); 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Layout layout = widget.getLayout(); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ny = Math.min(ny, layout.getHeight() - (widget.getHeight() - 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project padding)); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ny = Math.max(ny, 0); 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17227d377221c7970a5205c83f8a9f62f755dc1fa5dDianne Hackborn int oldX = widget.getScrollX(); 17327d377221c7970a5205c83f8a9f62f755dc1fa5dDianne Hackborn int oldY = widget.getScrollY(); 17427d377221c7970a5205c83f8a9f62f755dc1fa5dDianne Hackborn 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project scrollTo(widget, layout, nx, ny); 17627d377221c7970a5205c83f8a9f62f755dc1fa5dDianne Hackborn 17727d377221c7970a5205c83f8a9f62f755dc1fa5dDianne Hackborn // If we actually scrolled, then cancel the up action. 17827d377221c7970a5205c83f8a9f62f755dc1fa5dDianne Hackborn if (oldX != widget.getScrollX() 17927d377221c7970a5205c83f8a9f62f755dc1fa5dDianne Hackborn || oldY != widget.getScrollY()) { 18027d377221c7970a5205c83f8a9f62f755dc1fa5dDianne Hackborn widget.cancelLongPress(); 18127d377221c7970a5205c83f8a9f62f755dc1fa5dDianne Hackborn } 18227d377221c7970a5205c83f8a9f62f755dc1fa5dDianne Hackborn 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19138e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn public static int getInitialScrollX(TextView widget, Spannable buffer) { 19238e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn DragState[] ds = buffer.getSpans(0, buffer.length(), DragState.class); 19338e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn return ds.length > 0 ? ds[0].mScrollX : -1; 19438e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn } 19538e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn 19638e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn public static int getInitialScrollY(TextView widget, Spannable buffer) { 19738e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn DragState[] ds = buffer.getSpans(0, buffer.length(), DragState.class); 19838e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn return ds.length > 0 ? ds[0].mScrollY : -1; 19938e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn } 20038e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static class DragState implements NoCopySpan { 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float mX; 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float mY; 20438e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn public int mScrollX; 20538e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn public int mScrollY; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean mFarEnough; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean mUsed; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 20938e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn public DragState(float x, float y, int scrollX, int scrollY) { 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mX = x; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mY = y; 21238e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn mScrollX = scrollX; 21338e98fccfab9592f871f3066f8569c559f1ee226Dianne Hackborn mScrollY = scrollY; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 217