родная прокрутка для андроида не работает

Я пытаюсь создать собственный скроллер для Android, используя приведенный ниже код. Я сохранил стек как отдельное приложение и установил его на свой планшет Android, но текст не прокручивается.

local sScrollerID

on preOpenCard
   local tScrollerRect, tContentRect

   // Only create a scroller on a mobile device
   if environment() is not "mobile" then exit preOpenCard

   // Set the area of the scroller
  put the rect of group "scrollArea" into tScrollerRect

   // Set the are of the content to be scrolled
   put the left of field "lorem",the top of field "lorem",the right of field "lorem",the formattedHeight of field "lorem" into tContentRect

   // Create the scroller control
   mobileControlCreate "scroller", "loremScroll"
   put the result into sScrollerID

   // Set the properties of the scroller
   mobileControlSet "loremScroll", "rect", tScrollerRect
   mobileControlSet "loremScroll", "contentRect", tContentRect
   mobileControlSet "loremScroll", "visible", true
   mobileControlSet "loremScroll", "scrollingEnabled", true
   mobileControlSet "loremScroll", "vIndicator", true
   mobileControlSet "loremScroll", "vscroll", 0
end preOpenCard

on closeCard
   // Delete the scroller
   if environment() is not "mobile" then exit closeCard
   mobileControlDelete sScrollerID
end closeCard

on scrollerDidScroll hOffset, vOffset
   // When the user scrolls move the displayed content
   set the vScroll of group "scrollArea" to vOffset
end scrollerDidScroll

Как исправить скрипт? Стек здесь для всех, кому нужно его увидеть: встроенная прокрутка android.zip

=========

Я также попытался создать такую ​​же прокрутку для группы, состоящей из нескольких текстовых полей, и даже с предложениями Марка (см. Ниже) это все еще не работает.

код здесь:

local sScrollerID

on openCard
   local tScrollerRect, tContentRect

   // Only create a scroller on a mobile device
   if environment() is not "mobile" then exit openCard

   // Set the area of the scroller
   put the rect of group "scrollArea" into tScrollerRect

   // Set the area of the content to be scrolled
   put the left of group "scrollArea",the top of group "scrollArea",the formattedWidth of group "scrollArea",the formattedHeight of group "scrollArea" into tContentRect


   // Create the scroller control
   mobileControlCreate "scroller", "loremScroll"
   put the result into sScrollerID

   // Set the properties of the scroller
    mobileControlSet "loremScroll", "rect", tScrollerRect
   mobileControlSet "loremScroll", "contentRect", tContentRect
   mobileControlSet "loremScroll", "visible", true
   mobileControlSet "loremScroll", "scrollingEnabled", true
   mobileControlSet "loremScroll", "vIndicator", true
   mobileControlSet "loremScroll", "vscroll", 0
end openCard

on closeCard
   // Delete the scroller
  if environment() is not "mobile" then exit closeCard
   mobileControlDelete sScrollerID
end closeCard

on scrollerDidScroll hOffset, vOffset
   // When the user scrolls move the displayed content
   set the vScroll of group "scrollArea" to vOffset
end scrollerDidScroll

Какие исправления мне нужно внести, чтобы групповая прокрутка работала? Стек можно скачать отсюда: нативная прокрутка в android- группа.zip

================

3) Теперь, когда прокрутка для группы работает правильно, я попытался создать такую ​​же прокрутку для сетки данных, используя этот код:

on openCard

      local tScrollerRect, tContentRect

   // Only create a scroller on a mobile device
   if environment() is not "mobile" then exit openCard

   // Set the area of the scroller
   put the rect of group "DataGrid 1" into tScrollerRect

   // Set the area of the content to be scrolled
  put 0,0,(the formattedWidth of group "DataGrid 1"),(the formattedHeight of group "DataGrid 1") into tContentRect

   // Create the scroller control
   mobileControlCreate "scroller", "loremScroll"
   put the result into sScrollerID

   // Set the properties of the scroller
   mobileControlSet "loremScroll", "rect", tScrollerRect
   mobileControlSet "loremScroll", "contentRect", tContentRect
   mobileControlSet "loremScroll", "visible", true
   mobileControlSet "loremScroll", "scrollingEnabled", true
   mobileControlSet "loremScroll", "vIndicator", true
   mobileControlSet "loremScroll", "vscroll", 0

end openCard


on closeCard
   // Delete the scroller
   if environment() is not "mobile" then exit closeCard
   mobileControlDelete sScrollerID
 end closeCard

 on scrollerDidScroll hOffset, vOffset
   // When the user scrolls move the displayed content
   set the vScroll of group "DataGrid 1" to vOffset
 end scrollerDidScroll

Но прокрутка сетки данных с этим кодом не работает. Какие исправления я должен сделать? Стек можно скачать здесь: DG-android native scroller.zip< /а>


person mark    schedule 02.04.2014    source источник


Ответы (1)


Вы берете contectRect поля, а затем пытаетесь прокрутить группу. Вероятно, вы хотите прокрутить поле, поэтому вам нужно изменить

on scrollerDidScroll hOffset, vOffset
   // When the user scrolls move the displayed content
   set the vScroll of group "scrollArea" to vOffset
end scrollerDidScroll

в

on scrollerDidScroll hOffset, vOffset
   // When the user scrolls move the displayed content
   set the vScroll of fld "lorem" to vOffset
end scrollerDidScroll

Если вы действительно хотите прокрутить группу, вам нужно установить tContentRect в обработчике preOpenCard на форматированные ширину и форматирование высоты группы.

person Mark    schedule 02.04.2014
comment
Я изменил значение vScroll для fld lorem на vOffset, но это не сработало. Я также попытался с изменением поместить прямоугольник группы scrollArea в tScrollerRect, чтобы поместить прямоугольник fld lorem в tScrollerRect, и это тоже не сработало. Наконец, я попытался прокрутить группу, изменив эту строку: поместите левую часть группы scrollArea, верхнюю часть группы scrollArea, форматированную ширину группы scrollArea, форматированную высоту группы scrollArea в tContentRect, что я не уверен, правильно ли это, и это сделал тоже не работает. Любые другие предложения? - person mark; 02.04.2014
comment
Это может показаться странным, но не могли бы вы попробовать настроить вид прокрутки в обработчике openCard вместо обработчика preOpenCard? В обработчике preOpenCard вещи еще не визуализировались, и я не знаю, известны ли уже прямоугольные свойства команде mobileControlSet на этом этапе. Просто чтобы быть уверенным. Я буду продолжать думать об этом. - person Mark; 02.04.2014
comment
Да, обработчик openCard был исправлением. Спасибо! Сейчас попробовал создать аналогичную прокрутку для группы, состоящей из нескольких текстовых полей (см. выше мое дополнение и код), но опять не получается. - person mark; 02.04.2014
comment
Я нашел решение для групповой прокрутки - эта строка: поместите 0,0, (formatedWidth группы scrollArea), (formatedHeight группы scrollArea) в tContentRect под // Установите область содержимого для прокрутки вместо: положить слева от группы scrollArea, вверху группы scrollArea, formattedWidth группы scrollArea, formattedHeight группы scrollArea в tContentRect - person mark; 02.04.2014
comment
Теперь, наверное, самая сложная задача: как создать собственный скроллер для сетки данных - см. добавленный код выше. - person mark; 02.04.2014
comment
Datagrid — это группа. Моим первым шагом было бы использование formattedHeight dataGrid. Если это не сработает, нам придется найти способ угадать общую высоту (или максимальную прокрутку) dataGrid. Это сложно, поэтому я надеюсь, что formattedHeight будет работать. - person Mark; 03.04.2014
comment
Я пробовал с этой строкой: поместите 0,0 (formatedWidth группы DataGrid 1), (formatedHeight группы DataGrid 1) в tContentRect, но это не сработало. Итак, как действовать сейчас? - person mark; 03.04.2014
comment
Я попытался использовать предложение Хэнсона из этого урока: lessons.runrev.com/s/lessons/m/4069/l/, отвечая на вопрос Кевина. Он сказал: ...сделайте сетку данных настолько большой, насколько вам нужно, чтобы вы могли разместить все данные на одной странице, таким образом удалив собственные скроллеры. Затем результат можно добавить в группу, контролируемую встроенными мобильными скроллерами. Я так и сделал — см. прикрепленный файл stack.href=dl.dropboxusercontent.com/u/99863601/ и все равно прокрутка не работает. - person mark; 05.04.2014
comment
Еще одна вещь при использовании трюка Хэнсона. При создании dg таким большим, чтобы вместить 640 строк текста без скроллера, его высота составляет около 16000! Затем требуется очень много времени, чтобы запустить такое приложение. Я думаю, это потому, что все строки загружаются сразу, а с помощью скроллера загружаются только видимые строки. (В прикрепленных стеках всего 15 строк). - person mark; 05.04.2014
comment
Привет Керам. Я думаю, что лучше начать новый вопрос и включить общий контекст вместе со всей информацией, которая есть в ваших последних 6 комментариях. Вы можете опубликовать ссылку на свой новый вопрос здесь. - person Mark; 06.04.2014
comment
Datagrid высотой 16000, вероятно, не будет правильно прокручиваться. Более того, вся идея datagrid как раз и заключается в том, что вам не нужны такие трюки — даже за кулисами или под капотом. - person Mark; 06.04.2014
comment
Я исправил это благодаря Клаусу на форуме LC. Строки, которые нужно было исправить: поместите 0,0, (DGformattedWidth группы DataGrid 1), (DGformattedHeight группы DataGrid 1) в tContentRect и установите DGvScroll группы DataGrid 1 на vOffset. Он по-прежнему не работает идеально, поэтому я создал новую тему: stackoverflow.com/questions/22943152/ - person mark; 08.04.2014