рдореБрдЭреЗ рдЙрд╕рдХреА рд╕реНрдХреНрд░реАрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлреЛрди рд╕реНрдХреНрд░реАрди рдХреА рддрдХрдиреАрдХреА рдЬрд╛рдирдХрд╛рд░реА, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдкрд░реАрдХреНрд╖рдг рдкреВрд▓ рдореЗрдВ рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рд╣рдореЗрд╢рд╛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА, рд╣реЛрдо рд╕реНрдХреНрд░реАрди рдкрд░ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреЙрдбреА рдореВрд╡рдореЗрдВрдЯ рдХреЗ рдмрд┐рдирд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдХреЗрд╡рд▓ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ: рд╡рд┐рдЬреЗрдЯ рдпрд╛ рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░ред рдореИрдВрдиреЗ рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░ рдЪреБрдирд╛, рд╡реЗ "рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░" рднреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдо рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд▓реЙрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рднреАред рдпрд╣ рд▓реЗрдЦ рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕реБрдЭрд╛рд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╕рддреНрдп рдХреА рдЦреЛрдЬ рдореЗрдВ
"рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░" рдмрд┐рд▓реНрд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рд░реЛрдпрд╛ред 9 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣реБрдП рдмреНрд▓реЙрдЧ рдкрд░ рдкрд╣рд▓реА (рдФрд░ рдХреЗрд╡рд▓) рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд╛рдж рд╕реЗ, Google рдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рднреА рд╕рдордЭрджрд╛рд░реА рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдпрд╛ рдХреЛрдбрд▓реИрдм рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдордЭрдирд╛ рдерд╛ред
рдкрд╣рд▓реЗ рдореВрд▓ рдмрд╛рддреЗрдВред рдПрдВрдбреНрд░реЙрдЗрдб рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдпрд╛рдВрддреНрд░рд┐рдХреА рдРрд╕рд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдорд╛рди рд╣реИред рдЪреВрдВрдХрд┐ "рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░" рднреА рдПрдХ рдЖрд╡реЗрджрди рд╣реИ, рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рдШрдЯрдХ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЙрдореНрдореАрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд╕реЗрд╡рд╛ рд╣реЛрдЧреАред рдЗрд╕реЗ рдЦреЛрдЬрдирд╛ рдЖрд╕рд╛рди рд╣реИ: рдпрд╣ WallpaperService рд╣реИ ред
"рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░" рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдХрд╛ рдЬреАрд╡рди рдЪрдХреНрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдпрд╛ рджреГрд╢реНрдп рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рддрджрдиреБрд╕рд╛рд░, рдПрдХ рдФрд░ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ WallpaperService.Engine рд╣реИ (рдФрд░ рдпрд╣ рдЬрд░реВрд░реА рд╣реИ рдХрд┐ WallpaperService рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ !)ред рдпрджрд┐ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЧрддрд┐рд╡рд┐рдзрд┐, рд╕реЗрд╡рд╛ рдФрд░ рдЙрдирдХреЗ рдЬреИрд╕реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдПрдХ рд╣реА рдкреНрд░рджрд╛рддрд╛ рд╣реЛрдЧрд╛ред
"рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░" рдХрд╛ рдЬреАрд╡рди рдЪрдХреНрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
OnCreate (рд╕рд░рдлреЗрд╕рд╣реЛрд▓реНрдбрд░ рд╕рд░рдлреЗрд╕рд╣реЛрд▓реНрдбрд░)
onSurfaceCreated (рд╕рд░рдлреЗрд╕рд╣реЛрд▓реНрдбрд░ рдзрд╛рд░рдХ)
onSurfaceChanged (рд╕рд░рдлреЗрд╕рд╣реЛрд▓реНрдбрд░ рд╣реЛрд▓реНрдбрд░, рдЗрдВрдЯ рдлреЙрд░реНрдореЗрдЯ, рдЗрдВрдЯ рдЪреМрдбрд╝рд╛рдИ, рдЗрдВрдЯ рд╣рд╛рдЗрдЯ)
onVisibilityChanged (рдмреВрд▓рд┐рдпрди рджрд┐рдЦрд╛рдИ)
onSurfaceRedrawNeeded (рд╕рд░рдлреЗрд╕рд╣реЛрд▓реНрдбрд░ рдзрд╛рд░рдХ)
onSurfaceDestroyed (рд╕рд░рдлреЗрд╕рд╣реЛрд▓реНрдбрд░ рдзрд╛рд░рдХ)
onDestroy ()
рдЗрд╕ рд╕реВрдЪреА рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЪрд┐рддреНрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдпрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдиреАрдореЗрд╢рди рд╣реИ рддреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛), рдФрд░ рдЬрдм рд╕рднреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рд░реЛрдХрдиреЗ рдФрд░ рдмреИрдЯрд░реА рдХреЛ рдмрд░реНрдмрд╛рдж рди рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛред
OnSurfaceRedrawNeeded () рд╡рд┐рдзрд┐ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рдиреАрдЪреЗ рдкрдврд╝реЗрдВред рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреГрд╢реНрдп () рд╡рд┐рдзрд┐ рднреА рд╣реИ (рдЬреЛ isVisible
рдореЗрдВ isVisible
рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ)ред
рдЕрдм рдЖрдк рдЗрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЕрдВрдд рд╕реЗ рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛ред
рдЦреАрдВрдЪрдирд╛
рд╣рдореЗрдВ рдЦреБрдж рдХреЛ рдХреИрдирд╡рд╕ рдкрд░ рдЦреАрдВрдЪрдирд╛ рд╣реЛрдЧрд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд▓реЗрдЖрдЙрдЯ рдФрд░ рдЗрдирдлреНрд▓реЛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╕рд░реНрдлреЗрд╕рд╣реЙрд░реНрдб рд╕реЗ рдХреИрдирд╡рд╕ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдкрд░ рдХреИрд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ, рдиреАрдЪреЗ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред
fun dummyDraw(c: Canvas) { c.save() c.drawColor(Color.CYAN) c.restore() }
рдЗрдВрдЬрди рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рддрд░реАрдХреЗ
onSurfaceRedrawNeeded
рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдЬреАрд╡рдирдЪрдХреНрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рддрддреНрдХрд╛рд▓ onSurfaceRedrawNeeded
рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрддрд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реНрд╡рд░ рд╣реЛрдЧрд╛ред
override fun onSurfaceCreated(holder: SurfaceHolder?) { super.onSurfaceCreated(holder) redrawHandler.planRedraw() } override fun onSurfaceChanged(holder: SurfaceHolder?, format: Int, width: Int, height: Int) { super.onSurfaceChanged(holder, format, width, height) redrawHandler.planRedraw() } override fun onVisibilityChanged(visible: Boolean) { super.onVisibilityChanged(visible) redrawHandler.planRedraw() } override fun onSurfaceDestroyed(holder: SurfaceHolder?) { super.onSurfaceDestroyed(holder) redrawHandler.omitRedraw() } override fun onDestroy() { super.onDestroy() redrawHandler.omitRedraw() } override fun onSurfaceRedrawNeeded(holder: SurfaceHolder) { super.onSurfaceRedrawNeeded(holder) redrawHandler.omitRedraw() drawSynchronously(holder)
OnSurfaceRedrawNeeded рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ , рдЬреЛ рд╣рдореЗрдВ рдЙрд╕реА рдирд╛рдо рдХреЗ рд╕рд░реНрдлреЗрд╕рд╣рд╛рд░реНрдб рдХреЙрд▓рдмреИрдХ рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ , рдЬреЛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╣реЛрдиреЗ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдХреЙрд▓рдмреИрдХ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреБрд░рд╛рдиреА (рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧрд▓рдд) рддрд╕реНрд╡реАрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рдмрд┐рдирд╛, рддреБрд░рдВрдд рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдЗрд╕ рдкрджреНрдзрддрд┐ рд╕реЗ рд╡рд╛рдкрд╕реА рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рддрдм рддрдХ рд╕реНрдХреНрд░реАрди рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рдордпрдмрджреНрдзрдХ
рдореБрдЭреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ, рди рдХрд┐ рдЗрд╕рдореЗрдВ рд░рдирдиреЗрдмрд▓ рдХреЛ рдЪрд▓рд╛рдирд╛ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдмрд╣реБрдд рд╕реБрдВрджрд░ред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдиреАрдореЗрд╢рди рдпрд╛ рдирд┐рдпрдорд┐рдд рдЕрдкрдбреЗрдЯ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢ рдХреА рдирд┐рдпрдорд┐рдд рдХрддрд╛рд░ ( рдкреЛрд╕реНрдЯрдЕрдЯреНрдЯреАрдо () рдФрд░ рдкреЛрд╕реНрдЯрдбреЗрд▓рд┐рдб () рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрджрд┐ рдбреЗрдЯрд╛ рдЫрд┐рдЯрдкреБрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП planRedraw()
рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
val redrawHandler = RedrawHandler() inner class RedrawHandler : Handler(Looper.getMainLooper()) { private val redraw = 1 fun omitRedraw() { removeMessages(redraw) } fun planRedraw() { omitRedraw() sendEmptyMessage(redraw) } override fun handleMessage(msg: Message) { when (msg.what) { redraw -> drawSynchronously() else -> super.handleMessage(msg) } } }
рд╕реЗрд╡рд╛ рдФрд░ рдЗрдВрдЬрди
рд╕реЗрд╡рд╛ рдФрд░ рдЗрдВрдЬрди рд╕реЗ рдпрд╣ рдорд╛рд░реНрд╢рдХрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
class FooBarWallpaperService : WallpaperService() { override fun onCreateEngine() = FooBarEngine() inner class FooBarEngine : Engine() { .... } }
AndroidManifest рдФрд░ рдЕрдиреНрдп рдордВрддреНрд░
рдореИрдВ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдордВрддреНрд░ рдХрд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рд╕рдордЭрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдореЗрдВ .../app/src/main/res/xml
"рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░" рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ XML рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо AndroidManifest рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╢рдмреНрдж foobarwallpaper
рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ)
<?xml version="1.0" encoding="UTF-8"?> <wallpaper xmlns:android="http://schemas.android.com/apk/res/android" android:thumbnail="@drawable/some_drawable_preview" android:description="@string/wallpaper_description" />
рд╕реЗрд╡рд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ permission
, meta-data
рдФрд░ intent-filter
рди рдЦреЛрдПрдВ:
<service android:name=".FooBarWallpaperService" android:enabled="true" android:label="Wallpaper Example" android:permission="android.permission.BIND_WALLPAPER"> <meta-data android:name="android.service.wallpaper" android:resource="@xml/foobarwallpaper" > </meta-data> <intent-filter> <action android:name="android.service.wallpaper.WallpaperService"> </action> </intent-filter> </service>
рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ
"рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░" рдЫреБрдкрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрдд рд╣реИред рдореИрдВ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд╕реИрдорд╕рдВрдЧ рдкрд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рд╣реЛрдо рд╕реНрдХреНрд░реАрди рдкрд░ рд▓реЙрдиреНрдЧ рдкреНрд░реЗрд╕ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлреЛрди рдбреЗрд╕реНрдХрдЯреЙрдк рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЛрдб рдореЗрдВ рдЬрд╛рдПрдЧрд╛, рд╡реЙрд▓рдкреЗрдкрд░ рдЖрдЗрдХрди рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
рд╣рдо рд╡реЙрд▓рдкреЗрдкрд░ рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдХрдИ рдЦрдВрдб, рд╣рдореЗрдВ рдореЗрд░реЗ рд╡реЙрд▓рдкреЗрдкрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдЕрдиреБрднрд╛рдЧ рдХреЗ рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рд╕рднреА рджреЗрдЦреЗрдВ , рд╕реВрдЪреА рдкреВрд░реНрдг рд╕реНрдХреНрд░реАрди рдореЗрдВ рдЦреБрд▓рддреА рд╣реИред
рд╣рдо рдореЗрдиреВ рдХреЙрд▓ рдХреЗ "рддреАрди рдЕрдВрдХ" рджрдмрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ LIve рд╡реЙрд▓рдкреЗрдкрд░ рдЖрдЗрдЯрдо (рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реИ), рдЙрдкрд▓рдмреНрдз "рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░" рдХреА рдПрдХ рд╕реВрдЪреА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред
рд╣рдорд╛рд░реЗ рд╡реЙрд▓рдкреЗрдкрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдФрд░ "рд╣реЛрдо рдФрд░ рд▓реЙрдХ рд╕реНрдХреНрд░реАрди" рдЪреБрдиреЗрдВред
рдПрдХ "рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди" рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, isPreview () рд╡рд┐рдзрд┐ рд╣реИ), рд╡реЙрд▓рдкреЗрдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ... рдФрд░ рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЙрдкрд▓рдмреНрдз рд╡реЙрд▓рдкреЗрдкрд░ рдХреА рд╕реВрдЪреА рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред
"рд╣реЛрдо" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЖрдирдВрдж рд▓реЗрдВред
рдФрд░ рдлрд┐рд░ Android рд╡реЙрдЪ?!
рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЕрд╡рд▓реЛрдХрди рдпрд╣ рд╣реИ рдХрд┐ рдЪреЗрд╣рд░реЗ рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб рд╡реЙрдЪ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ (рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдХрд┐ рдЙрдирдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реИрдВ): рд╡рд╣реА рд╕реЗрд╡рд╛ + рдЗрдВрдЬрди , рд▓рдЧрднрдЧ рд╡рд╣реА рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдФрд░ рдкреНрд░рдХрдЯ рдореЗрдВ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЗрд░рд╛рджрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ ( рдЬреЛ рд╢рдмреНрдж рд╡реЙрд▓рдкреЗрдкрд░ рдЪрд╛рд░ рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ :), рдЖрдкрдХреЛ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╢реЗрдбреНрдпреВрд▓рд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ ред
рд╡реЙрдЪ рдлреЗрд╕реЗрд╕ рдХреА рдмреЗрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд░реЗрдбреА-рдореЗрдб onDraw()
, рдЬрд╣рд╛рдБ рдХреИрдирд╡рд╕ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП invalidate()
рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдореМрд▓рд┐рдХ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡реЙрдЪ рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЦреЛрдж рд╕рдХрддреЗ рд╣реИрдВ (рд▓рд┐рдВрдХ рдпрд╣рд╛рдВ , рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ)ред
рдХреНрдпрд╛ рд╣реБрдЖ?
рд╣рд░реЗ рд░рдВрдЧ рдХреА рд╕реНрдХреНрд░реАрди рдХреЛ рдкреЗрдВрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдмрд╣реБрдд рдХрдо рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЪрд┐рддреНрд░реЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд рдореБрдХрд╛рдмрд▓рд╛ рд╕реНрдЯреИрдВрдб рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЪрд┐рддреНрд░реЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА

рд╕реНрдЯрд┐рдХрд░ рдкрд┐рдЫрд▓реА рдкреАрдврд╝реА рдХреА рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдгрд╛рд▓реА рд╣реИред
рдзрдиреНрдпрд╡рд╛рдж
рдпрджрд┐ рдЗрди рджреЛ рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рддреЛ рдореИрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЕрдВрдзреЗрд░реЗ рдореЗрдВ рднрдЯрдХрддрд╛ рд░рд╣рддрд╛ред рдореИрдВ рд╕реЛрдЪ рднреА рдирд╣реАрдВ рд╕рдХрддрд╛ рдХрд┐ 2010 рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЧреБрдгрд╡рддреНрддрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рд╕рд╛рде рд╡реЗ рдХреИрд╕реЗ рд▓рд┐рдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рдереЗ!
Kirill Grouchnikov, рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░
рд╡реЛрдЧреЗрд▓рд╛, рдПрдВрдбреНрд░реЙрдЗрдб рд▓рд╛рдЗрд╡ рд╡реЙрд▓рдкреЗрдкрд░ - рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓
рд╕реНрд░реЛрдд рдХреЛрдб
тЖТ рдЧрд┐рдЯрд╣рдм