Android рдкрд░ SurfaceView рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

рдирдорд╕реНрдХрд╛рд░, рдЦрднреНрд░рд╡рд░реНрдгреЛрдВ!
рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ 2D рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдХреИрдирд╡рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рджреГрд╢реНрдп рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдЖрдкрдХреА рдХрдХреНрд╖рд╛ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ рдСрдирдбреНрд░рд╛рдЗрд╡ () рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдЗрд╕рдХреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред OnDraw () рдкрджреНрдзрддрд┐ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддреЗ рд╣реБрдП, рдЕрдорд╛рдиреНрдп () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдорд╛рдиреНрдп () рдХреЙрд▓рд┐рдВрдЧ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреА рд╣реИ рдХрд┐ рдСрдирдбреНрд░рд╛рдЗрд╡ () рд╡рд┐рдзрд┐ рддреБрд░рдВрдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рд╣рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП) рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐ рд╢рд╛рдпрдж рд╣реА рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред

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

рднреВрддрд▓ рджреГрд╢реНрдп рд╡рд░реНрдЧ


рд╕рд░реНрдлреЗрд╕ рд╡реНрдпреВ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХреНрд╖реЗрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдХреНрд░рд┐рдпрд╛рдПрдВ рдПрдХ рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рджреГрд╢реНрдп рддрддреНрд╡реЛрдВ рдХреЗ рдкреВрд░реЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рди рд╣реЛред рд╕рд╣рд╛рдпрдХ рдзрд╛рд░рд╛ рд╣рдорд╛рд░реЗ рд╕рд░рдлреЗрд╕ рд╡реНрдпреВ рдХреЗ рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рдЧрддрд┐ рдкрд░ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдкреВрд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЛ рдореБрдЦреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЖрддрд╛ рд╣реИ:
  1. SurfaceView рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдПрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдирд╛ рдФрд░ SurfaceHolder.Callback рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛
  2. рдПрдХ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдПрдВ рдЬреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ред

рд╡рд░реНрдЧ рдирд┐рд░реНрдорд╛рдг


рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рднреВрддрд▓ рд╡реНрдпреВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрдлреЗрд╕рд╣реЙрд▓реНрдбрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдХреЙрд▓рдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддреАрди рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рд╕рд░рдлреЗрд╕рдХреНрд░рд┐рдПрдЯреЗрдб (), рд╕рд░рдлреЗрд╕рдЪреИрдирдб (), рдФрд░ рд╕рд░рдлреЗрд╕рдбреНрд░реЛрдпрд░реНрдб (), рдЬрд┐рдиреНрд╣реЗрдВ рдкреЗрдВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рддреЗ рд╕рдордп, рдЗрд╕реЗ рдмрджрд▓рддреЗ рд╣реБрдП, рдФрд░ рдЗрд╕реЗ рдирд╖реНрдЯ рдХрд░рддреЗ рд╣реБрдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреЗрдВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреИрдирд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реАрдзреЗ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдХрдХреНрд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░реНрдлреЗрд╕рд╣рд╛рд░реНрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЖрдк рдЗрд╕реЗ getHolder () рд╡рд┐рдзрд┐ рдХрд╣рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрдирд╡рд╛рд╕ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреАред
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { public MySurfaceView(Context context) { super(context); getHolder().addCallback(this); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } } 

рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рд╣рдореЗрдВ рд╕рд░реНрдлреЗрд╕рд╣реЙрд▓реНрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдРрдб-рдХреЙрд▓рдмреИрдХ () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрд▓рдмреИрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╕рд░рдлреЗрд╕рдЯреЗрдб () рд╡рд┐рдзрд┐ рдореЗрдВ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд░рдлреЗрд╕рдбреЗрд╕реНрдЯреНрд░реЛрдПрдб () рдореЗрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕реЗ рдЦрддреНрдо рдХрд░реЗрдВред рд╣рдо рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд┐рдХрд╛рдпреЛрдВ рдХреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдереНрд░реЗрдб рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдПрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВред рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ, рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓реЗ рдЬрд╛рдПрдЧрд╛: рд╕рддрд╣рд╣рд╛рд░реНрдб рдФрд░ рд╕рдВрд╕рд╛рдзрди рдЙрд╕ рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрдХреНрд░реАрди рдкрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рдзреНрд╡рдЬ рдЪрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдбреНрд░рд╛рдЗрдВрдЧ рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ рдФрд░ рдЗрд╕ рдЪрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╣реИред рдареАрдХ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рд░рди () рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрди рд╡рд░реНрдЧ рдорд┐рд▓рддрд╛ рд╣реИ:
 class DrawThread extends Thread{ private boolean runFlag = false; private SurfaceHolder surfaceHolder; private Bitmap picture; private Matrix matrix; private long prevTime; public DrawThread(SurfaceHolder surfaceHolder, Resources resources){ this.surfaceHolder = surfaceHolder; //  ,    picture = BitmapFactory.decodeResource(resources, R.drawable.icon); //      matrix = new Matrix(); matrix.postScale(3.0f, 3.0f); matrix.postTranslate(100.0f, 100.0f); //    prevTime = System.currentTimeMillis(); } public void setRunning(boolean run) { runFlag = run; } @Override public void run() { Canvas canvas; while (runFlag) { //         //    long now = System.currentTimeMillis(); long elapsedTime = now - prevTime; if (elapsedTime > 30){ //    30  -    //     2 . //   -   prevTime = now; matrix.preRotate(2.0f, picture.getWidth() / 2, picture.getHeight() / 2); } canvas = null; try { //   Canvas    canvas = surfaceHolder.lockCanvas(null); synchronized (surfaceHolder) { canvas.drawColor(Color.BLACK); canvas.drawBitmap(picture, matrix, null); } } finally { if (canvas != null) { //  .     surfaceHolder.unlockCanvasAndPost(canvas); } } } } } 

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рддрд╛рдЬрд╝рд╛ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рд╣рдо рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐ рдХреЛ рддреАрди рдЧреБрдирд╛ рдмрдврд╝рд╛рдПрдВрдЧреЗ, рдФрд░ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рд░ 30 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рдПрдХ рдмрд╛рд░ рдирд╣реАрдВ, рд╣рдо рдЗрд╕рдХреЗ рдХреЗрдВрджреНрд░ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЪрд┐рддреНрд░ 2 рдбрд┐рдЧреНрд░реА рдШреВрдореЗрдВрдЧреЗред рдХреИрдирд╡рд╛рд╕ рдкрд░ рдЦреБрдж рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдореЗрдВ рдбрд╛рд▓рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рд╕рд┐рд░реНрдл рд╕реНрдХреНрд░реАрди рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЫрд╡рд┐ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред рддреЛ рдЖрдк рдЗрд╕реЗ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдбреНрд░рд╛рдЗрдВрдЧ рд╢реБрд░реВ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ


рдЕрдм, рдЬрдм рд╣рдордиреЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдереНрд░реЗрдб рдХреЛ рд▓рд┐рдЦрд╛, рддреЛ рд╣рдо рдЕрдкрдиреЗ рд╕рд░рдлреЗрд╕ рд╡реНрдпреВ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рдВрдкрд╛рджрди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдБред рд╕рд░рдлреЗрд╕рдЯреЗрдб () рд╡рд┐рдзрд┐ рдореЗрдВ, рдПрдХ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдФрд░ рдореЗрдердб рд╕рд░рдлреЗрд╕рдбреНрд░реЛрдпрдб () рдореЗрдВ рд╣рдо рдЗрд╕рдХрд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, MySurfaceView рд╡рд░реНрдЧ рдирд┐рдореНрди рд░реВрдк рд▓реЗрдЧрд╛:
 public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { private DrawThread drawThread; public MySurfaceView(Context context) { super(context); getHolder().addCallback(this); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { drawThread = new DrawThread(getHolder(), getResources()); drawThread.setRunning(true); drawThread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { boolean retry = true; //    drawThread.setRunning(false); while (retry) { try { drawThread.join(); retry = false; } catch (InterruptedException e) { //   ,       } } } } 

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдзрд╛рд░рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕рд░рдлреЗрд╕рдЯреЗрдб () рдкрджреНрдзрддрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рд▓реВрдирд░рд▓реИрдВрдб рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕рд░реНрдлреЗрд╕рд╡реНрдпреВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╡рд░реНрдЧ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрджрд┐ рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╣реЛрдо рдХреБрдВрдЬреА рджрдмрд╛рдХрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ IllegalThreadStateException рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреАред

рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЧрддрд┐рд╡рд┐рдзрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
 public class SurfaceViewActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MySurfaceView(this)); } } 


рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рд░реЛрдЯреЗрд╢рди рдХреЗ рдХрд╛рд░рдг, рдЫрд╡рд┐ рдереЛрдбрд╝реА рдзреБрдВрдзрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдпрд╣ рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рджрд┐рдЦрддрд╛ рд╣реИ):


рдирд┐рд╖реНрдХрд░реНрд╖


рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреА рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреИрдирд╡рд╛рд╕ рдкрд░ рдбреНрд░рд╛рдЗрдВрдЧ рд╕реЗ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рджреГрд╢реНрдп, рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░ рд╣реИред рдЕрдВрддрд░ рдХреЛ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЛ рдмрд╣реБрдд рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реИред рд╕рд╣рд╛рдпрдХ рдкреНрд░рд╡рд╛рд╣ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рдореИрдВ рдХреБрдЫ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВрдиреЗ рд▓реЗрдЦ рдмрдирд╛рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдерд╛:
  1. рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЦреЗрд▓ LunarLander рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
  2. рд╕рд░рдлреЗрд╕ рд╡реНрдпреВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓реЗрдЦ

Source: https://habr.com/ru/post/In126316/


All Articles