【问题标题】:KivyMD UI and animations are slow and laggy on AndroidKivyMD UI 和动画在 Android 上运行缓慢且滞后
【发布时间】:2019-08-16 13:15:15
【问题描述】:

我正在与 KivyMD 合作。用户界面太慢了。动画很慢而且经常卡住。即使在Kitchen Sink 示例中也是如此。虽然在我的 Windows 和 Linux 上都很好。问题是在为 android 构建包之后。

这正是我的问题和开发者给出的答案:

https://github.com/HeaTTheatR/KivyMD/issues/77

不幸的是,它没有帮助,用户界面很慢

main.py:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen,ScreenManager
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
from kivy.properties import StringProperty

from kivymd.theming import ThemeManager
from kivymd.utils.cropimage import crop_image
from kivymd.tabs import MDTabs,MDTabsBase
from kivymd.button import MDTextButton

class Scr_Mng(ScreenManager):
    pass

################################ 

class MainPage(Screen):

    def __init__(self, **kwargs):
        super(MainPage, self).__init__(**kwargs)
        Window_width, window_height = Window.size
        background_size = (int(Window_width),int(window_height))
        #crop_image(background_size , "bg.jpg" , "bg_croped.jpg"  )


##############################
class Ask_tab(MDTabsBase):
    profile_pic = StringProperty('assets/bg.jpg')
    profile_name = StringProperty('Sina')
    def new_question(self,question):
        print(question)
##############################
class Answer_tab(MDTabsBase):
    def load_questions(self):
        for x in range(20):
            self.ids.question_items_box.add_widget( Question_items() )

##############################

class Question_items(BoxLayout):
    pass

##############################
class Me_tab(MDTabsBase):
    pass
##############################

class Myapp(App):
    theme_cls = ThemeManager()
    theme_cls.primary_palette = 'DeepPurple'
    title = "Navigation Drawer"
    theme_cls.theme_style = "Light"
    mainpage_title = "Ask/Answer"

    def build(self):
        return Scr_Mng()


Myapp().run()

kv 文件:

#:import MDToolbar kivymd.toolbar.MDToolbar
#:import MDTabs kivymd.tabs.MDTabs
#:import MDLabel kivymd.label.MDLabel
#:import MDTextField kivymd.textfields.MDTextField
#:import MDTextFieldRound kivymd.textfields.MDTextFieldRound
#:import MDRoundFlatButton kivymd.button.MDRoundFlatButton

#:import MDCard kivymd.cards.MDCard  

<Scr_Mng>:
    MainPage:

<Ask_tab>:
    text: 'Ask'
    FloatLayout:
        size: root.width, root.height
        ScrollView:
            BoxLayout:
                orientation: 'vertical'
                size_hint_y: None
                height: self.minimum_height
                padding: dp(48)
                spacing: dp(15)

                BoxLayout:
                    size_hint: None,None
                    size: root.width*0.2,root.width*0.2
                    pos_hint: {'center_x': .5}
                    canvas.before:
                        Color:
                            rgba: 1,1,1,1
                        Ellipse:
                            pos: self.pos
                            size: self.size
                            source: 'assets/unknown.jpg'

                MDLabel:
                    pos_hint: {'center_x': .5 }
                    size_hint: 1, None
                    height: root.width*0.1
                    text: root.profile_name
                    text_size: self.size
                    halign: 'center'
                    font_style: 'H6'   

                MDTextField:
                    id: question_field
                    pos_hint: {'center_x': .5 }
                    size_hint_x: 0.8
                    multiline: True
                    hint_text: "What question is in your mind?"
                    helper_text: ""
                    helper_text_mode: "persistent"
                    max_text_length: 1000
                MDRoundFlatButton:
                    text: "Post"
                    icon: "login"
                    pos_hint: {'center_x': .5}
                    width: 170
                    on_release: root.new_question(question_field.text)


<Answer_tab>:
    text: 'Answer'
    on_kv_post: root.load_questions()
    FloatLayout:
        size: root.width, root.height
        ScrollView:
            BoxLayout:
                id: question_items_box
                orientation: 'vertical'
                size_hint_y: None
                height: self.minimum_height
                padding: dp(15)
                spacing: dp(15)

<Question_items>:
    orientation: 'vertical'
    spacing: dp(15)
    size_hint: 1,None
    height: 300
    pos_hint: {'center_x': .5}
    BoxLayout:
        canvas.before:
            Color:
                rgba: 0.3,0.5,0.2,1
            Rectangle:
                pos: self.pos
                size: self.size
    MDSeparator:


<Me_tab>:
    text: 'Me'

<MainPage>:
    name: 'main'
    # on_kv_post: root.load_main_tabs() 
    BoxLayout:
        orientation: 'vertical'
        MDToolbar:
            id: toolbar
            title: app.mainpage_title
            md_bg_color: app.theme_cls.primary_color
            background_palette: 'Primary'
            background_hue: '500'
            elevation: 10
            right_action_items:
                [['dots-vertical', lambda x: None]]

        MDTabs:
            id: main_tabs
            Ask_tab:
            Answer_tab:
            Me_tab:

【问题讨论】:

  • 我可能会误解,但如果库的开发人员无法帮助您解决您的问题,我怀疑这里的任何人都能够
  • 新浪好像在问关于优化构建过程的问题。链接的bug #77 说“[在我的构建中] 应用程序 UI 看起来很慢 [但是] 我从 Google Play 安装了 KIvyMD Demo,它工作正常。”

标签: python android kivy kivy-language


【解决方案1】:

你应该做一些事情来解决这个问题:

  1. 确保应用程序的图标不太大,例如,如果图标是 1200x1800 的图像(png、jpg 等),这会使 apk 在安装之前滞后,在安装过程中,以及当您尝试启动应用程序时,即使图标是 200x300 也可能导致滞后(这必须在您的“buildozer.spec”文件中设置),例如我的是:

    (str) 应用程序的预启动

    presplash.filename = /home/jbsidis/Escritorio/_a/Suministros/fs.png

    (str) 应用程序图标

    icon.filename = /home/jbsidis/Escritorio/_a/Suministros/fs_icon.png

  2. 有时会使用 p4a、kivy 和 kivyMD 的当前标准版本,以确保您拥有最新但稳定的版本,我建议在您的规范文件的要求中使用以下内容(这样做会生成一个流畅的应用程序,例如这个https://youtu.be/WxsL1pdzpYc):

    requirements = kivy==2.0.0,kivymd,python3,pyjnius,plyer,requests,urllib3,chardet,idna,pip,Image,PIL

所以推荐的 kivy 版本是 2.0.0 版本,推荐的 kivyMD 是当前的稳定版本(不是 master 分支,因为图标在那个分支中不起作用)

一切都应该解决。

只需在终端执行命令即可创建 apk:

python3 -m buildozer -v android debug

或者:

buildozer -v android debug

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多