2015-02-22 2 views
0

Мне нужно показать большой стол с двумерным прокруткой, как лист Excel. Он может быть очень большим, до 1000 строк (и ~ 10 столбцов).Как сделать двухсторонний прокручиваемый вид в андроиде?

Итак, все решения, которые я нашел на основе идеи ListView-to-HorizontalScrollView. Это слишком медленно, чтобы его можно было использовать.

Я попытался использовать WebView, но он еще медленнее прокручивается в прокручиваемый.

Может быть, я могу получить растровое изображение моего спискаLayout и поместить его в HorizontalScrollable при каждом обновлении? Или использовать какую-то магию? Или, может быть, я могу использовать некоторую библиотеку?

ответ

0

Вот идея:

  • ListView для строк
  • Каждая строка представляет собой отдельный горизонтальный LinearLayout, каждый вид ребенка представляет собой клетку
  • The LinearLayout заворачивают в HorizontalScrollView, так что каждый элемент в ListView - это HorizontalScrollView.
  • При прокрутке по горизонтали, прокрутите все HorizontalScrollViews одновременно, чтобы они все оставались вертикально выровненными друг с другом.

Не похоже, чтобы все эти HorizontalScrollViews были эффективными, но они могут отображать одну строку намного быстрее, чем один HorizontalScrollView может отображать встроенный ListView.

Теперь, как сделать горизонтальный свиток? У вас есть два варианта:

  1. Пропагандируйте события разворота на одном экране HorizontalScrollView для всех остальных. Pro: проще кодировать. Con: Из-за задержек в потоке, пропущенный HSV может не оставаться точно синхронизированным с другими HSV.

  2. Захват событий события из центрального места, как переопределение в ListView, и распространение их на ВПГ. Pro: чистый дисплей. Con: сложнее кодировать все onInterceptTouchEvent и onTouchEvent voodoo, необходимые для захвата swipes.

Другой недостаток этого подхода состоит в том, что взгляды на ячейки в горизонтальном LinearLayout должны быть явные ширины установлены, в противном случае столбцы не будут совпадать.

Я не мог в хорошей совести рекомендовать это, если я не попробовал, поэтому я взломал код. Вы можете видеть это на android-table-test project on Github

У меня есть источник данных с 18 столбцами и 36K строк и, кажется, прокручивается красиво (в обоих направлениях) на всех моих устройствах.

+0

Есть ли какая-либо документация? .. – sleeply4cat

+0

Не говорить. Это с открытым исходным кодом, человек! Код - это документация. :) В проекте GitHub есть образец кода, плюс люди задают вопросы здесь на SO. Я собираюсь поиграть с Lollipop RecyclerView и посмотреть, могу ли я получить сетку, которая прокручивается в обоих направлениях. Если я заставлю его работать, я обновлю свой ответ. Я предполагаю, что если добавление поддержки lib v7 в ваш проект будет означать разницу между работой сетки и неработоспособностью, вы можете ее добавить. –

+0

@ sleeply4cat Я обновил свой ответ с помощью другой концепции, вы можете посмотреть мой код и посмотреть, что вы думаете, –

Смежные вопросы