Ich möchte unendliche Scroll für meine App erstellen. Es ist mein Code:Kivy unendliche Scroll
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()
I overrode on_scroll_move
Methode und wenn blättern auf der Unterseite I Methode aufgerufen, die neue Bilder hinzufügt.
Es funktioniert gut, aber ich habe das Problem, dass Scroll-Position unten nach dem Laden von Bildern bleiben, aber ich werde es nicht auf die ersten geladenen Bilder verschieben.
Ich habe versucht, den richtigen Wert auf scroll_y
zu setzen, aber es funktioniert nicht, vielleicht muss ich auch eine Methode aufrufen oder andere Variablen ändern. Irgendwelche Ratschläge?
Für eine unendliche Reihe ähnlicher Breiten versuchen Sie den RecycleView. Es wird Dinge effizient für Sie verwalten. – inclement