Киви бесконечный свиток
Я хочу создать бесконечную прокрутку для моего приложения. Это мой код:
from kivy.app import App
from kivy.uix.scrollview import ScrollView
from kivy.uix.gridlayout import GridLayout
from kivy.uix.image import AsyncImage
IMAGES_URLS = ['https://upload.wikimedia.org/wikipedia/commons/c/c3/Jordan_by_Lipofsky_16577.jpg' for _ in range(5)]
def upload_images(widget):
layout = widget.children[0]
layout_childrens = len(layout.children)
for url in IMAGES_URLS:
img = AsyncImage(source=url, size_hint_y=None, height=240)
layout.add_widget(img)
widget.scroll_y = 100 - (100 * layout_childrens / (layout_childrens + len(IMAGES_URLS)))
class InfinityScrollView(ScrollView):
def on_scroll_move(self, touch):
if self.scroll_y < 0:
upload_images(self)
return super(InfinityScrollView, self).on_scroll_move(touch)
class InfiniteScrollApp(App):
def build(self):
layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
layout.bind(minimum_height=layout.setter('height'))
for url in IMAGES_URLS:
img = AsyncImage(source=url, size_hint_y=None,
height=240)
layout.add_widget(img)
root = InfinityScrollView(size_hint=(None, None), size=(400, 400),
pos_hint={'center_x': .5, 'center_y': .5})
root.add_widget(layout)
return root
if __name__ == '__main__':
InfiniteScrollApp().run()
Я перешел метод on_scroll_move
и при прокрутке снизу вызвал метод upload_images
, который добавляет новые изображения.
Это нормально работает, но у меня есть проблема, что положение прокрутки остается на дне после загрузки изображения, но я не буду перемещать его на первые загруженные изображения.
Я пытался установить правильное значение scroll_y
, но это не работает, возможно, я также должен вызвать какой-то метод или изменить другие переменные. Какие-нибудь советы?
1 ответ:
Я нашел решение, мне нужно было переопределить 2 переменные (
scroll_y
иeffect_y
). Это проблема на github , где я нашел решение. Это мой фиксированный код.def upload_images(self): layout = self.children[0] layout_childrens = len(layout.children) for url in IMAGES_URLS: img = AsyncImage(source=url, size_hint_y=None, height=240) layout.add_widget(img) bar_position = layout_childrens / (layout_childrens + len(IMAGES_URLS)) self.scroll_y = 100 - 100 * bar_position self.effect_y.value = self.effect_y.min - self.effect_y.min * bar_position