рд╕рднреА рдХреЛ рдмрдзрд╛рдИ! рдЬреИрд╕реЗ рд╣реА рдореЗрд░реЗ рд▓реЗрдЦ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЧрд░реНрдо рдЪрд░реНрдЪрд╛ рд╕реЗ рдзреБрдЖрдВ
рдЙрдард╛ ,
рдХрд┐рд╡реА рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╡рд┐рдХрд╛рд╕ рдирдВрдмрд░ 1 рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрдзрд╛ рдврд╛рдВрдЪрд╛ рд╣реИ , рдФрд░ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдЗрд╕
рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдЯрд┐рдкреНрдкрдгреА рд╣реИ , рд╣рдордиреЗ (
рдорд┐рд░рд┐рдореЛрди ,
рд╕реЗрдУрдб ) рд╕реЛрдЪрд╛ рдХрд┐ рдХрд┐рд╡реА рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣рдорд╛рд░реЗ рдФрд░ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред Xamarin.Forms рдФрд░ React Native, рдЙрди рдкрд░ рдПрдХ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд╕рд╛рде рдпрд╣ Habr├й рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рд╣реИ,
GitHub рдкрд░ рд╢рд▓рдЬрдо рдФрд░ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЖрдкрдХреЛ рдмрддрд╛рдПрдВ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рджреМрд░рд╛рди рдХрд┐рди рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рдЗрдХрдЯреНрдард╛ рд╣реЛрдиреЗ рдФрд░ рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдХрд╛рдо рдХрд░рдирд╛ рддрдп рдХрд┐рдпрд╛ред
рдЗрд╕ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рддреАрди рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╢реЗрдбреНрдпреВрд▓рд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЖрдЬ рдЗрди рддреАрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрдЯреМрддреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдЕрдзрд┐рдХ рдЪрдордХрджрд╛рд░ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХреЛрдИ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИ / рдХрд╛рдо рдкрд░ / рдШрд░ рдкрд░, рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рд╕рд╛рджрдЧреА рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдбреЗрдЯрд╛, рдпреВрдЖрдИ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рддреАрди рдЪреМрдЦрдЯреЗ - рдПрдХ рдкреНрд░рдпреЛрдЧред Xamarin.Formsред рднрд╛рдЧ реирддреАрди рдЪреМрдЦрдЯреЗ - рдПрдХ рдкреНрд░рдпреЛрдЧред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдореВрд▓рдирд┐рд╡рд╛рд╕реАред рднрд╛рдЧ 3рдпрд╣ рд▓реЗрдЦ рдЪрдХреНрд░ рдореЗрдВ рдкрд╣рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ ToR рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЦреБрдж рдХреЗ рд▓рд┐рдП рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛ рдерд╛, рддрд╛рдХрд┐ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реЛред
рд╡рд┐рдХрд▓реНрдк TK:
- рдиреЛрдЯреНрд╕ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдиреЛрдЯреНрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдиреЛрдЯ рдХреЗ рд▓реЗрдЦрдХ рдХреЛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
- рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрджрд░ рдХреЗ рдиреЛрдЯреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ / рд╣рдЯрд╛ / рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдиреЛрдЯреНрд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЖрдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди 150 рдкрд┐рдХреНрд╕реЗрд▓ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ
- рдиреЛрдЯреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рдиреЛрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдФрд░ рд╕реНрд╡рд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпреВрдЖрдИ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХрд┐рд╡реА рдкрд░ рдереЛрдбрд╝реА рдорджрдж рдХрд░реЗрдВ:Kivy рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЧреНрд░рд╛рдлрд╝рд┐рдХреНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ, рдЬрд┐рд╕реЗ OpenGL ES 2 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкрд╛рдпрдерди / рд╕рд╛рдЗрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЖрдзреБрдирд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдирд╛ рд╣реИ, рдЬреЛ рд╕реНрдкрд░реНрд╢ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдЕрдзрд┐рдХ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рдХрд┐рд╡реА рдРрдк рд▓рд┐рдирдХреНрд╕, рдУрдПрд╕ рдПрдХреНрд╕, рд╡рд┐рдВрдбреЛрдЬ, рдПрдВрдбреНрд░реЙрдЗрдб, рдЖрдИрдУрдПрд╕ рдФрд░ рд░рд╛рдкрдмреЗрд░реА рдкрд╛рдИ рдЬреИрд╕реЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рд╡рд┐рдХрд╛рд╕ рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рд╕реЗ рд▓реЗрдХрд░ NumPy рдФрд░ OpenCV рддрдХ рдХреА рдХрдИ рд╡рд┐рд╕реНрддреГрдд рдкрд╛рдЗрдереНрд░реВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИрдВред PyJNIus (Android) рдФрд░ PyOBJus (iOS) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Kivy рдХреА рдкрд╣реБрдВрдЪ рд▓рдЧрднрдЧ рд╕рднреА рдореВрд▓ рдореЛрдмрд╛рдЗрд▓ API (GPS, Camera, Accelerometer, Google API Android рдХреЗ рд▓рд┐рдП) рддрдХ рд╣реИ, рдЬреЛ Python рдореЗрдВ рдЬрд╛рд╡рд╛ / рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХреЛрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рдкреЗрдЯрддрд╛ рд╣реИред ред
рдХрд┐рд╡реА рддреЗрдЬ рд╣реИред рдпрд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд┐рд╖реНрдкрд╛рджрди рдЧрддрд┐ рджреЛрдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рд╕рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп C рд╕реНрддрд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред Kivy рднреА GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рднреА рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЬреАрдкреАрдпреВ рдЬреНрдпрд╛рджрд╛рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
рдХрд┐рд╡реА рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХреАрд╡реА рдХрд╛ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╡рд┐рдХрд╛рд╕ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдирдИ рддрдХрдиреАрдХреЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрд┐рд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдХрдИ рдмрд╛рд░ рдирдП рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рд╣реИ, рдХрднреА-рдХрднреА рдЙрдирдХреА рд░рд┐рд╣рд╛рдИ рд╕реЗ рдкрд╣рд▓реЗ рднреАред рдХрд┐рд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рдХрд┐рд╡реА WM_TOUCH рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ 7 рдкреЗрди рдФрд░ рдЯрдЪ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рдбрд┐рд╡рд╛рдЗрд╕ рд╕рд┐рд╡реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред OS X рдкрд░, рдЖрдк рдорд▓реНрдЯреА-рдЯрдЪ рд╕рдкреЛрд░реНрдЯ рд╡рд╛рд▓реЗ Apple рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдЯреНрд░реИрдХрдкреИрдб рдФрд░ рдЪреВрд╣реЛрдВред рд▓рд┐рдирдХреНрд╕ рдкрд░, рдЖрдк HID рдЗрдирдкреБрдЯ рдЗрдирдкреБрдЯ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, Kivy TUIO (рдореВрд░реНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ) рдФрд░ рдХрдИ рдЕрдиреНрдп рдЗрдирдкреБрдЯ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдЖрдк рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЖрд╡реЗрджрди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХреАрд╡реА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдмрд╣реБрдореБрдЦреА рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд╕реНрдЯрдо GUI рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА GUI рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛ рдмрдирд╛рдИ рд╣реИред рдпрд╣ рднрд╛рд╖рд╛ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ, рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
рдФрд░, рд╣рд╛рдБ, рдХреАрд╡реА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИред рдЖрдк рдЗрд╕реЗ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдПрдХ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдЙрддреНрдкрд╛рдж рдореЗрдВ рдпрд╛ рдУрдкрди рд╕реЛрд░реНрд╕ рдореЗрдВред рдореИрдВ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рджреВрдВрдЧрд╛ рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдпреЗ рдпрд╛ рдЙрди рддрддреНрд╡реЛрдВ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред IDE рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд╣рдореЗрд╢рд╛
PyCharm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛
рд╣реВрдВ , рдЬреЛ
Kv рднрд╛рд╖рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ - рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбреАрдПрд╕рдПрд▓ рднрд╛рд╖рд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ UI рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдХрдВрдХрд╛рд▓
CreatorKivyProject рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ MVVM рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕реНрдХреНрд░реАрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдмреЗрд╕рдХреИрдкреНрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╡рд┐рдЧреЗрдЯреНрд╕ рдФрд░ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рддрд░реНрдХ рд╣реИрдВ, рдЬреЛ рдХрд┐
рдХреЗрд╡реА рднрд╛рд╖рд╛ рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣реИрдВред
Applibs рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛
рдХрд╛ рдЙрдкрдпреЛрдЧ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,
рдбреЗрдЯрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдореАрдбрд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реА, рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╣реЛрддреЗ рд╣реИрдВред
Main.py рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реИред рд╡рд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреВрдЖрдИ
рдЯреЛрдбреЛрд▓рд┐рд╕реНрдЯ () рд░рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
() рд░реЗрдВрдбрд░ рдХрд░реЗрдВ, рдЕрдЧрд░ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдПрдХ рдПрд░рд░
рдкрдХрдбрд╝реЗрдВ рдФрд░ рдПрдХ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдВрдбреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ, рдЬреЛ
рдХреНрд░рд┐рдПрдЯрд░рдХреАрд╡рд┐рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпреВрдЯрд┐рд▓рд┐рдЯреА рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИ,
рдЬрд┐рд╕рдХрд╛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЗ рд╕рд╛рде
todolist.py рдлрд╝рд╛рдЗрд▓
TodoList рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓реЗрдЖрдЙрдЯ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИ, рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╣рд╛рд░реНрдб рдХреБрдВрдЬреА рдХреА рдШрдЯрдирд╛рдУрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реА рдкрд╣рд▓реА рд╕реНрдХреНрд░реАрди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред
рдЯреЛрдбрд▓рд┐рд╕реНрдЯ ()ред рд░рди () рдХреЗ рдмрд╛рдж ,
рдмрд┐рд▓реНрдб рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдЬреЗрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдХреЛрдб рдЬреЛ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд┐рдВрдЧрд▓ рд╕реНрдХреНрд░реАрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
рдФрд░ рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рд╡рд░реНрдЧ рдХрд╛ рдЖрд░реЗрдЦ рд╣реИ:
рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХреЗрд╡рд▓ рддреАрди
рдЧрддрд┐рд╡рд┐рдзрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ , рд╕реНрдХреНрд░реАрди рдореИрдиреЗрдЬрд░ (
рд╕реНрдХреНрд░реАрдирдореЗрдиреЗрдЬрд░ ), рдЬрд┐рд╕реЗ рд╣рдордиреЗ
рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рд╣реИ,
рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ:
#:import ListProjectsActivity libs.uix.baseclass.ListProjectsActivity.ListProjectsActivity #:import ListNotesActivity libs.uix.baseclass.ListNotesActivity.ListNotesActivity #:import AddNewNoteActivity libs.uix.baseclass.AddNewNoteActivity.AddNewNoteActivity #:import ActivityManager libs.uix.baseclass.ActivityManager.ActivityManager <RootScreen@BoxLayout>: orientation: 'vertical' spacing: dp(2) ActivityManager: id: activityManager ListProjectsActivity: id: listProjectsActivity ListNotesActivity: id: listNotesActivity AddNewNoteActivity: id: addNewNoteActivity
рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЧрддрд┐рд╡рд┐рдзрд┐ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рдПрдЧреАред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣
ListProjectsActivity рд╣реИ ред рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдореЗрдВ, рдореИрдВрдиреЗ
рд╕реНрдХреНрд░реЙрд▓рд╡реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕рд╣реА рдерд╛ -
RecycleView ред рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓рд╛, рдпрджрд┐ рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рдкрдж рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рд╣реИрдВ, рддреЛ рд╡рд╣ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред
RecycleView рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рд▓рдореНрдмрд╛рдИ рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрдбрд╝реА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдЧрддрд┐рд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕реВрдЪреА рдпрд╛ рдкреГрд╖реНрдард╛рдВрдХрди рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЯреАрдУрдЖрд░ рдореЗрдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА рдЧрдИ, рдореИрдВрдиреЗ
рд╕реНрдХреНрд░реЙрд▓рд╡реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рджреВрд╕рд░рд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ
RecycleView рдХреЗ рддрд╣рдд рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ
рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛ (рдФрд░ рдпрд╣
рд╕реНрдХреНрд░реЙрд▓рд╡реНрдпреВ рд╕реЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ
рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИ), рдФрд░ рдЗрд╕рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдЪрд╛рд░ рдШрдВрдЯреЗ рдореЗрдВ рдзреБрдПрдВ рдХреЗ рдЯреВрдЯрдиреЗ рдФрд░ рдХреЙрдлреА рдХреЗ рдмреНрд░реЗрдХ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред
рдкреНрд░реЛрдЬреЗрдХреНтАНрдЯреНрд╕ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╕реНтАНрдХреНрд░реАрди рд╕реНрдХреНрд░реАрди (ListProjectsActivity.kv рдФрд░ ListProjectsActivity.pyред) рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдЪреВрдВрдХрд┐ ListProjectsActivity рд╕реНрдХреНрд░реАрди рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╡рд░реНрдЧ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
# -*- coding: utf-8 -*- from kivy.app import App from kivy.uix.screenmanager import Screen as Activity from libs.uix.baseclass.InputDialog import InputDialog from . ProjectItem import ProjectItem class ListProjectsActivity(Activity): objApp = App.get_running_app() def setListProjects(self, objApp): for nameProject in objApp.dataProjects.keys(): self.ids.layoutContainer.add_widget(ProjectItem(projectName=nameProject)) def createNewProject(self, projectName): if projectName and not projectName.isspace(): self.ids.layoutContainer.add_widget(ProjectItem(projectName=projectName)) self.objApp.addProjectInBase(projectName) def deleteProject(self, instance): for projectName in self.objApp.dataProjects: if instance.projectName == projectName: self.objApp.deleteProjectFromBase(projectName) break def showDialogCreateProject(self, *args): InputDialog( title=' ', hintText=' ', textButtonCancel='', textTuttonOk='', eventsCallback=self.createNewProject).show()
рдбрд╛рдпрд▓реЙрдЧ рдмреЙрдХреНрд╕ рдХреЙрд▓:
рдХрд╛рд░реНрдп рдореЗрдВ, рд╡рд┐рдВрдбреЛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдФрд░ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
рдореИрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдирд┐рдпрдорд┐рдд рд╢рдмреНрджрдХреЛрд╢ рд╣реИ
{"Name Project": [{"pathToAvatar": "", "nameDate": "", "nameAuthor": "", "textNote": ""}]}
рдФрд░ рдЬреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг json рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ
рдбреЗрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдЗрдЯрдо рдХреНрдпрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рд╛рдЗрдк рдХрд░рдХреЗ рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
SwipeToDelete рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ
SwipeBehavior рд╡рд░реНрдЧ рд╕реЗ рд╕реВрдЪреА рдореЗрдВ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
ProjectItemActivity.py from kivy.properties import StringProperty from kivy.uix.boxlayout import BoxLayout from libs.applibs.swipetodelete import SwipeBehavior class ProjectItemActivity(SwipeBehavior, BoxLayout): projectName = StringProperty() def on_touch_down(self, touch): if self.collide_point(touch.x, touch.y): self.move_to = self.x, self.y return super(ProjectItemActivity, self).on_touch_down(touch) def on_touch_move(self, touch): if self.collide_point(touch.x, touch.y): self.reduce_opacity() return super(ProjectItemActivity, self).on_touch_move(touch) def on_touch_up(self, touch): if self.collide_point(touch.x, touch.y): self.check_for_left() self.check_for_right() return super(ProjectItemActivity, self).on_touch_up(touch)
рдФрд░ рдХреЗрд╡реА рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдордж рдХрд╛ рд╡рд┐рд╡рд░рдг:
ProjectItemActivity.kv <ProjectItemActivity>: swipe_rectangle: self.x, self.y , self.width, self.height swipe_timeout: 1000000 swipe_distance: 1 event_after_swipe: app.listActivity.deleteProject OneLineListItem: text: root.projectName on_press: app.listActivity.setNotesProject(root.projectName)
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд┐рд╡реА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдПрдХ
on_touch рдкрджреНрдзрддрд┐ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рд╕реНрдХреНрд░реАрди рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдШрдЯрдирд╛ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рдШрдЯрдирд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ:
['double_tap_time', 'grab_state', 'is_double_tap', 'is_mouse_scrolling', 'is_touch', 'is_triple_tap', 'move', 'push', 'push_attrs', 'push_attrs_stack', 'scale_for_screen', 'time_end', 'time_start', 'time_update', 'triple_tap_time', 'ungrab', 'update_time_end']
Android рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдореЗрдиреВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ ...
рдпрд╣рд╛рдБ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдорд╛рдирдХ рдбреНрд░реЙрдкрдбрд╛рдЙрди рд╡рд┐рдЬреЗрдЯ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрд┐ рдЖрдк рдХреАрд╡реА рдореЗрдВ рд╕рднреА рд╡рд┐рдЬреЗрдЯ рдФрд░ рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рддрдирд╛ рдЖрдкрдХреА рдХрд▓реНрдкрдирд╛ рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдореБрдЭреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рд╕реБрдВрджрд░ рдореЗрдиреВ рдорд┐рд▓рд╛ред рдмрд╛рдИрдВ рдУрд░ рдЖрдзрд╛рд░ рдбреНрд░реЙрдкрдбрд╛рдЙрди рд╣реИ, рджрд╛рдИрдВ рдУрд░ рдореЗрд░рд╛ рд╣реИ:
рд╕рдВрджрд░реНрдн рдореЗрдиреВ рд╕реВрдЪреА рдХрд╛ рд▓реЗрдЖрдЙрдЯ:
ContextMenuAndroidActivity.kv #:import MDSeparator libs.applibs.kivymd.card.MDSeparator #:import MenuItem libs.applibs.animdropdown.MenuItem <ContextMenuAndroidActivity>: MenuItem: text: '' menu: root on_press: root.tapOnItem(self.text) MDSeparator: MenuItem: text: '' menu: root on_press: root.tapOnItem(self.text)
рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдХрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣рд┐рд╕реНрд╕рд╛:
ContextMenuAndroidActivity.kv from kivy.app import App from kivy.clock import Clock from libs.applibs.animdropdown import AnimMenuDropDown class ContextMenuAndroidActivity(AnimMenuDropDown): def tapOnItem(self, textItem): objApp = App.get_running_app() if textItem == '': objApp.listActivity.deletePost() else: objApp.activityManager.current = 'add new note activity' Clock.schedule_once(objApp.addNewNoteActivity.editNote, .5)
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо
рдореЗрдиреВрдбреНрд░реЙрдкрдбрд╛рдЙрди рдмрдЯрди рдХреЛ
рдПрдирд┐рдореЛрдирдбрд╛рдЙрдирдбрд╛рдЙрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЗрд╕ рдмрдЯрди рдХреЛ рдЙрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИред рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ, рдпрд╣ рдиреЛрдЯ рдХрд╛рд░реНрдб рдореЗрдВ рджрд╛рдИрдВ рдУрд░ рдмрдЯрди рд╣реИ:
рдорд╛рд░реНрдХрдЕрдк рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдб рдиреЛрдЯреНрд╕:
рдмреЗрд╕ рдХреНрд▓рд╛рд╕
рдиреЛрдЯ :
from kivy.app import App from kivy.properties import StringProperty from kivy.uix.boxlayout import BoxLayout from libs.applibs.animdropdown import MenuButton from libs.applibs.swipetodelete import SwipeBehavior from . ContextMenu import ContextMenu class NoteActivity(SwipeBehavior, BoxLayout): nameDate = StringProperty() textNote = StringProperty() pathToAvatar = StringProperty() def __init__(self, **kwargs): super(NoteActivity, self).__init__(**kwargs) self.objApp = App.get_running_app() menuButton = MenuButton( dropdown_cls=ContextMenu, icon='dots-vertical', _on_dropdown_fnc=self.setCurrentPost) self.ids.titleBox.add_widget(menuButton) def setCurrentPost(self, *args): self.objApp.listNotesActivity.checkCurentPost = self
ListNotesActivity рдХрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
рдЖрд╡реЗрджрди рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХреИрд╕реЗ рдХрд░реЗрдВ? рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рджреВрд╕рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕реНрдХреНрд░реАрди рдореИрдиреЗрдЬрд░ рдХреЛ рдирдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛:
class ListNotesActivity(Activity): ... def addNewNote(self, *args): self.objApp.activityManager.current = 'add new note activity'
... рдЬрд╣рд╛рдБ
'рдирдпрд╛ рдиреЛрдЯ рдЧрддрд┐рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ' рдирдП рдиреЛрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╣реИред
AddNewNoteActivity рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рд╕реНрдХреНрд░реАрди рдФрд░ рд▓реЗрдЖрдЙрдЯ:
рдЖрдзрд╛рд░ рд╡рд░реНрдЧ:
from kivy.app import App from kivy.animation import Animation from kivy.uix.screenmanager import Screen as Activity from kivy.metrics import dp from libs.uix.baseclass.NoteActivity import NoteActivity class AddNewNoteActivity(Activity): objApp = None edit = False oldTextNote = '' def animationButton(self): self.objApp = App.get_running_app() self.ids.toolBar.title = self.objApp.listNotesActivity.ids.toolBar.title Animation(size=(dp(56), dp(56)), d=.5, t='in_out_cubic').start(self.ids.floatingButton) def addNewNotes(self, textNote): if self.edit: nameProject = self.ids.toolBar.title self.objApp.addEditNoteInBase(nameProject, textNote, self.oldTextNote) self.objApp.activityManager.backActivity('list notes activity', self.ids.floatingButton) self.objApp.listNotesActivity.checkCurentPost.textNote = textNote self.edit = False return self.objApp.listNotesActivity.ids.layoutContainer.add_widget( NoteActivity( textNote=textNote, nameDate='%s\n%s' % ( self.objApp.nameAuthor, self.objApp.getDate()), pathToAvatar='data/images/avatar.png')) self.objApp.addNoteInBase(self.ids.toolBar.title, textNote, 'data/images/avatar.png') def editNote(self, interval): self.edit = True self.ids.textInput.text = self.objApp.listNotesActivity.checkCurentPost.textNote self.oldTextNote = self.ids.textInput.text
рдмрдЯрди рдХреЛ рдЪреЗрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ
on_enter рдШрдЯрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ рд╕реНрдХреНрд░реАрди рдкрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ:
<AddNewNoteActivity> on_enter: root.animationButton()
рдкрд╛рдпрдерди рдХреЛрдб рдореЗрдВ:
class AddNewNoteActivity(Activity): def animationButton(self): Animation(size=(dp(56), dp(56)), d=.5, t='in_out_cubic').start(self.ids.floatingButton)

Xamarin.Forms рдХреЗ рд╡рд┐рдкрд░реАрдд, Kivy рдореЗрдВ UI рд╣рд░ рдЬрдЧрд╣ рдПрдХ рдЬреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рджреЛ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ (рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рдЖрдИрдУрдПрд╕) рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдФрд░ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЧреБрдгреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛ рджреЛ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рджреЛ рдорд╛рд░реНрдХрдЕрдк (рддрд░реНрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддрд╛ рд╣реИ)ред рдпрд╣ рдПрдХ рдкреНрд▓рд╕ рд╣реИ, рдЪреВрдВрдХрд┐ UI рд░реЗрдВрдбрд░рд┐рдВрдЧ рдФрд░ рдИрд╡реЗрдВрдЯреНрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдЖрдк рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрд╢реА API рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рджрд░реНрдж рд░рд╣рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рднреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЛ GPU рдкрд░ рджреЗрд╢реА OpenGL рдФрд░ SDL2 рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ 2 рдбреА рдФрд░ 3 рдбреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕рд╣рд┐рдд рдореЗрдиреВ, рдмрдЯрди рдФрд░ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЕрдиреНрдп рдЖрдХрд░реНрд╖рдг рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди Android UI рдордЯреЗрд░рд┐рдпрд▓рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реА рдЕрдВрддрд┐рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдЕрдиреБрдХреВрд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдерд╛:
рдпрд╣рд╛рдВ рд╕рд╛рдордЧреНрд░реА рдбрд┐рдЬрд╝рд╛рдЗрди рд╢реИрд▓реА рдореЗрдВ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдХрд┐рд╡реА рдпреВрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрд╢реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрдкрдХреЛ
рд╕реНрдХреНрд░реАрди рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбрд▓реЛрдВ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рддрд╛рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡рд┐рдВрдбреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЦреБрд▓ рдЬрд╛рдП рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реЛред рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдБрдХрд┐ рдпреВрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдордВрдЪ рд╕реЗ рдХреАрд╡реА рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯреНрд╕, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рднрд╛рд░реА рдФрд░ рдзреАрдореА emulators рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ UI рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдкрд░реАрдХреНрд╖рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░
-m рд╕реНрдХреНрд░реАрди: droid2, рдкреЛрд░реНрдЯреНрд░реЗрдЯ, рд╕реНрдХреЗрд▓ .75 рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдХрд┐ рдПрдХ рд╕реЗ рдПрдХ рдореЗрд░реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред
рд╕реНрдХреНрд░реАрди рдореЙрдбреНрдпреВрд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА: рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ рдХреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдХрд┐рд╡реА рдЕрдЪреНрдЫреА рд╣реИ? рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ! рдпрджрд┐ рдЖрдк рдЕрджреНрднреБрдд рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдореЛрдмрд╛рдЗрд▓ (рдФрд░ рди рдХреЗрд╡рд▓) рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрдо рдЕрджреНрднреБрдд рдХреАрд╡реА рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд┐рд╡реА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд╛рдн:- рдЪреВрдВрдХрд┐ рд╣рдо рдкрд╛рдпрдерди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╡рд┐рдХрд╛рд╕ рдЧрддрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдпрд╛ рдврд╛рдВрдЪреЗ рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреА рдЧрддрд┐ рд╕реЗ рдХрдИ рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред
- рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдореЗрдЧрд╛рдЯрди, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдУрдкрдирд╕реАрд╡реА, рдЬрд┐рдЖрдВрдЧреЛ, рдлреНрд▓рд╛рд╕реНрдХ, рдиреНрдпреВрдордкреА, рдПрдлрдПрдлрдПрдордкреАрдИ, рд╕реНрдХреНрд▓рд╛рдЗрдЯ 3, рдПрд▓рдПрдХреНрд╕рдПрдордПрд▓ рдФрд░ рд╣рдЬрд╛рд░реЛрдВ рдЕрдиреНрдпред
- рдЪреВрдВрдХрд┐ рдХрд┐рд╡реА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдУрдкрдирдЬреАрдПрд▓ рдФрд░ рдЬреАрдкреАрдпреВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд┐рдЬреЗрдЯ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпреВрдЖрдИ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреА рдЧрддрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИ рдФрд░ рдЖрдк рд╕рд┐рд░рджрд░реНрдж рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдиреНрдп рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рднрд╛рдЧ рдореЗрдВ рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рдЖрдк рдХреЗрд╡рд▓ рдЙрд╕ рдореВрд▓ рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реБрд╡рд┐рдзрд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рддрдХ рдкрд╣реБрдВрдЪ, рдХреИрдорд░реЗ рддрдХ рдкрд╣реБрдВрдЪ, рдмреНрд▓реВ рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА ...
рдкрд╛рдпрдЬрдиреАрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдИрдПрдордИрдЖрдИ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдореЙрдбрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрд╢реА рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛:
def _get_model_android(): from jnius import autoclass Build = autoclass('android.os.Build') return str(Build.DEVICE) def _get_imei_android(): from jnius import autoclass Service = autoclass('org.renpy.android.PythonActivity').mActivity Context = autoclass('android.content.Context') TelephonyManager = Service.getSystemService(Context.TELEPHONY_SERVICE) return str(TelephonyManager.getDeviceId())
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рдореЗрдВ рджреЗрд╢реА рдкреНрд░рд╛рдкреНрдд IMEI рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
import android.content.Context; import android.telephony.TelephonyManager; public class GetImeiAndroid { public String getImeiAndroid() { TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); String IMEINumber = tm.getDeviceId(); return IMEINumber; } }
- рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдЖрддреЗ рд╣реА рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдерд░реНрдб рдкрд╛рд░реНрдЯреА рдЬрд╛рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдЖрдк рд╕реНрдХреНрд░реАрди рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рд▓рд┐рдХ рд╣реИрдВ: рдЯрдЪ, рдорд▓реНрдЯреАрдЯрдЪ, рд╕реНрд╡рд╛рдЗрдк, рдкрдВрдЪрд┐рдВрдЧ, рдФрд░ рдЕрдиреНрдп рдШрдЯрдирд╛рдУрдВ рдХреЛ рджреЗрд╢реА рдХреЗ рдмрд┐рдирд╛ рдЬрд╛рдирд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд┐рд╡реА рдХрд╛ рдПрдХ рдЕрднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рдЯрдЪ рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рдХреАрд╡реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:
рд╕рднреА рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХрд┐рд╡реА рдХреЗ рдХрдИ рдиреБрдХрд╕рд╛рди рд╣реИрдВ:- "рдХреЛрд▓реНрдб рд╕реНрдЯрд╛рд░реНрдЯ" рдХреА рдЧрддрд┐, рдЕрд░реНрдерд╛рддреН, рдЙрд╕ рд╕рдордп рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкрд╣рд▓рд╛ рд▓реЙрдиреНрдЪ рдЬрдм рд╕рднреА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реЛрддрд╛ рд╣реИред рдмрд╛рдж рд╡рд╛рд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рджреЗрд╢реА рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреЗ рд╣реИрдВред
- рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред рдЖрдк рдПрдХ рд╕реВрдЪреА рдХреЛ 100,000 рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдзреЗ рд╕реЗрдХрдВрдб рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдб, рд╢реЛрдХреЗрд╕, рдЙрджреНрдзрд░рдг), рд▓реЗрдХрд┐рди рдПрдХ рд╢рд░реНрдд рдХреЗ рд╕рд╛рде - рд╕рднреА рдХрд╛рд░реНрдбреЛрдВ рдХреА рдКрдВрдЪрд╛рдИ рд╕рдорд╛рди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдкрд╛рда рдХреА рдЕрдЬреНрдЮрд╛рдд рд░рд╛рд╢рд┐ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрджреНрдзрд░рдг, рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдореЗрдВ, рддреЛ рдПрдХ рд╕рдордп рдореЗрдВ рджрд╕ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдВрдХ рдирд╣реАрдВ рджрд┐рдЦрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд▓рдЧрднрдЧ 10-15 рд╕реЗрдХрдВрдб рд▓рдЧреЗрдВрдЧреЗред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ рд╕реВрдЪреА рдореЗрдВ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╕рдордп 10-15 рдЖрдЗрдЯрдо рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
- рдкрд╛рда рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдЬреЛ 6500 рд╡рд░реНрдгреЛрдВ (рдореБрджреНрд░рд┐рдд рдкрд╛рда рдХреЗ 3.5 рдкреГрд╖реНрда) рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ - рд╣рдореЗрдВ рдПрдХ рдХрд╛рд▓реА рд╕реНрдХреНрд░реАрди рдорд┐рд▓рддреА рд╣реИред рдпрд╣ рдкрд╛рда рдХреЛ рддреЛрдбрд╝рдХрд░ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрднреА рднреА рдПрдХ рдмреИрд╕рд╛рдЦреА рд▓рдЧрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдордп рдореЗрдВ рдкрд╛рда рдХреА рдЗрддрдиреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕рдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдПрдЧрд╛ред рдЦрд╛рд╕рдХрд░ рдЬрдм рдмрд╛рдд рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреА рд╣реЛред
тЖТ
рдХрд┐рд╡реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд▓реЗрдЦрдХреАрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ
рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди (рдЬрд╝реЗрдирдХреЛрдб рд╕реЗ рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ) рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рджреЛрдиреЛрдВ рдкрд╛рдпрдерди рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред