Intereting Posts
Android Studio – Паника: не удалось открыть AVD RecyclerView в CoordinatorLayout теряет свое верхнее дополнение после изменений ориентации AppCompat – элемент не отображается в панели действий для уровней API v8-13 Как прокручивать до центра HorizontalScrollView только при запуске активности? Не удалось разрешить целевые «Google Inc.: API Google: 16» Перезапуск приложения Android после завершения процесса Theme.AppCompat.Light.NoActionBar.FullScreen не работает с Android 4.4 Приостановка потоков при запуске нескольких AsyncTasks во вложенных фрагментах и ​​медленное приложение Когда приложение переходит к фону во время выполнения AsyncTask, что он должен делать? Отправка пакета с транзакцией фрагментов Отключение Samsung «Автоматический сетевой коммутатор» для подключения WiFi Как настроить ширину и высоту выбора даты в android Проведите назад, как Pinterest или Tumblr RadioButtons с TextView в RadioGroup Как настроить Travis-CI для библиотеки Android?

Как получить текущее смещение Y ScrollView

ScrollView имеет метод для установки смещения прокрутки x и y, но никакого метода для получения текущего смещения (все, что мне действительно интересно, это смещение y, так как ScrollView поддерживает только вертикальную прокрутку). Я не вижу никакого метода, который бы работал в суперклассах, и попробовал getTop () для представления содержимого, которое всегда равно нулю. Я что-то упускаю?

Solutions Collecting From Web of "Как получить текущее смещение Y ScrollView"

Вызовите getScrollY () в ScrollView. См. Здесь для получения дополнительной информации: http://developer.android.com/reference/android/view/View.html#getScrollY%28%29

Если вы уверены, что после использования getScrollY () или getTop () вы должны получить некоторое значение, попробуйте поместить этот метод внутри

 yourScroolView.post(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(),"Current Y is : "+getScrollY,Toast.LENGTH_SHORT).show(); } }); 

Теперь это должно сработать. Согласно моему пониманию этого метода, он будет работать только после того, как макет будет нарисован. Это может быть одной из причин, по которым вы продолжали получать 0 ранее. Надеюсь, поможет.

Что относительно: computeHorizontalScrollOffset() и computeVerticalScrollOffset() .

Почему бы вам не попробовать что-то подобное?

 targetScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { @Override public void onScrollChanged() { int scrollX = targetScrollView.getScrollX(); Log.d(TAG, "scrollX: " + scrollX); } }); 

Я достигаю, чтобы понять следующее. Сначала получите высоту экрана и ширину экрана.

 DisplayMetrics metrics = getResources().getDisplayMetrics(); float screenWidth = metrics.widthPixels; float screenHeight = metrics.heightPixels; 

Затем, чтобы узнать высоту документа (общее количество, то, что отображается и что находится вне экрана)

 public float getDocumentHeight(){ return (computeVerticalScrollRange() * screenHeight)/computeVerticalScrollExtent(); } 

Наконец, чтобы получить смещение

 public float getTopY(){ return (getDocumentHeight() * computeVerticalScrollOffset())/computeVerticalScrollRange(); } 

Это даст вам верхнюю часть окна относительно той части документа, которую вы видите, чтобы вы могли найти точное местоположение события на

 public boolean onTouchEvent(MotionEvent event) { int y = event.getY() + (int) getTopY(); } 

Вы также можете сделать что-то подобное для обработки ширины