Intereting Posts
Как измерить потребление VRAM на Android? Постоянная константы для электронной почты с помощью GoogleApiClient.Builder Проблема с FOCUS_MODE_CONTINUOUS_PICTURE на Galaxy S5 Передача параметров из java-активности в приложение Adobe AIR GetIntent () при изменении ориентации – как справиться с этим? Измените или полностью удалите цвет подсветки InfoWindow из Google Maps v2 на Android Ограничения видеозахвата в телефонном разрыве + плагины для родных Как показать диалог выбора местоположения, например, карты Google? Google analytics easytracker вызывает исключение Java-соединения Почему пользовательский вид не является недействительным? Отказ от регистрации в Azure Notifier Защита от копирования старых версий Android Гладкая горизонтальная прокрутка Recyclerview внутри Scrollview Ошибка: ожидаемый ресурс типа styleable error Android-эмулятор с настройками прокси-сервера – Ошибка FATAL: .// android / base / sockets / Check failed: isValidFd (fd). Fd 1404 max1024

Как сделать вид, следуя моему пальцу, используя onScroll и GestureDetector – Android

У меня есть RelativeLayout с TextView посередине. У меня есть это, чтобы обнаружить onFling, onDown и onScroll события, используя SimpleOnGestureListener ().

Я бы хотел, чтобы TextView следил за моим пальцем по экрану (может быть только по оси x), и когда я поднимаю палец, чтобы он так оживлялся либо из экрана, либо обратно в середину (в зависимости от того, насколько далеко Переместил его).

Это то, что я обычно делаю в этих случаях.

Прежде всего, ваш метод onScroll должен выглядеть примерно так:

@Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // Make sure that mTextView is the text view you want to move around if (!(mTextView.getLayoutParams() instanceof MarginLayoutParams)) { return false; } MarginLayoutParams marginLayoutParams = (MarginLayoutParams) mTextView.getLayoutParams(); marginLayoutParams.leftMargin = (int) marginLayoutParams.leftMargin - distanceX; marginLayoutParams.topMargin = (int) marginLayoutParams.topMargin - distanceY; mTextView.requestLayout(); return true; } 

Мы модифицируем leftMargin и topMargin сумму, эквивалентную расстоянию, которое было прокручено.

Затем, чтобы сделать просмотр текста оживленным в исходное положение, вам нужно сделать это, когда событие ACTION_UP или ACTION_CANCEL :

 @Override public boolean onTouch(View arg0, MotionEvent event) { if (event.getActionMasked() == MotionEvent.ACTION_UP || event.getActionMasked() == MotionEvent.ACTION_CANCEL) { snapBack(); } return mScrollDetector.onTouchEvent(event); } 

Затем в методе snapBack мы обновляем текстовый вид:

 private void snapBack () { if (mTextView.getLayoutParams() instanceof MarginLayoutParams) { final MarginLayoutParams marginLayoutParams = (MarginLayoutParams) mTextView.getLayoutParams(); final int startValueX = marginLayoutParams.leftMargin; final int startValueY = marginLayoutParams.topMargin; final int endValueX = 0; final int endValueY = 0; mTextView.clearAnimation(); Animation animation = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { int leftMarginInterpolatedValue = (int) (startValueX + (endValueX - startValueX) * interpolatedTime); marginLayoutParams.leftMargin = leftMarginInterpolatedValue; int topMarginInterpolatedValue = (int) (startValueY + (endValueY - startValueY) * interpolatedTime); marginLayoutParams.topMargin = topMarginInterpolatedValue; mTextView.requestLayout(); } }; animation.setDuration(200); animation.setInterpolator(new DecelerateInterpolator()); mTextView.startAnimation(animation); } } 

И это должно быть! Вы можете изменить переменные endValueX и endValueY чтобы контролировать, когда текстовое представление возвращается, когда вы поднимаете палец.