
рдПрдХ рдПрдиреАрдореЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдерд╛ - рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╡рдХреНрд░ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред Googled рдФрд░ рдпрд╣ рдЬрд╛рдирдХрд░ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ stackoverflow.com рдкрд░ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рд╡рд╛рд▓реЗ рдХрдИ рдкреНрд░рд╢реНрди рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдЕрдиреБрддреНрддрд░рд┐рдд рд╣реИрдВред рдореБрдЭреЗ рдЕрдкрдиреА рдЖрд╕реНрддреАрди рдКрдкрд░ рд░реЛрд▓ рдХрд░рдиреА рдереА, рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░рдирд╛ рдФрд░ рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдирд╛ рдерд╛ред
рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╡рдХреНрд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдФрд░ рд╕реБрдВрджрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЪрд┐рдХрдиреАред
рдХрд╛рд░реНрдп рд╣рдорд╛рд░реА рддрд╕реНрд╡реАрд░ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╡рдХреНрд░ рдкрд░ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
PathMeasure рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╡рдХреНрд░ рдХреА рд▓рдВрдмрд╛рдИ "рдорд╛рдк"ред рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдмрд┐рдВрджреБ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрд┐рдВрджреБ рдХреЛ рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рдХреНрд░ рдХреЗ рдмреАрдЪ рдореЗрдВ рдмрд┐рдВрджреБ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
PathMeasure pm = new PathMeasure(ptCurve, false); float afP[] = {0f, 0f};
рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ (рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ
null
рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реА рддрд░рд╣ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ, рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ
getMatrix
рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рдПрдХ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рджреЗрддреА рд╣реИ - рдСрдлрд╕реЗрдЯ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдШреБрдорд╛рд╡ред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред
Matrix mxTransform = new Matrix(); pm.getMatrix( pm.getLength() * 0.5f, mxTransform, PathMeasure.POSITION_MATRIX_FLAG + PathMeasure.TANGENT_MATRIX_FLAG ); mxTransform.preTranslate(-bmSprite.getWidth(), -bmSprite.getHeight()); canvas.drawBitmap(bmSprite, mxTransform, null);
рдпрд╣ рд╡рд╣реА рдирд┐рдХрд▓рд╛ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдерд╛:
рдкреВрд░рд╛ рдХреЛрдб рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ -
рд╕реНрдкреНрд░рд╛рдЗрдЯрдЕрд▓реИрдВрдЧрдкрд╛рде рдпрд╛ рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ -
hg clone bitbucket.org/TedBeer/spritealongpath
hg clone bitbucket.org/TedBeer/spritealongpath
package net.tedbeer; import android.app.Activity; import android.os.Bundle; import android.content.Context; import android.graphics.*; import android.util.Log; import android.view.Display; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.widget.Toast; import java.util.*; public class moveSprite extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new SceneView(this)); } } public class SceneView extends View { private static Bitmap bmSprite; private static Bitmap bmBackground; private static Rect rSrc, rDest;
рдЕрдкрдбреЗрдЯ: рд╡реАрдбрд┐рдпреЛ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛, рдЬрд╣рд╛рдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╕реНрдкреНрд░рд╛рдЗрдЯ рднреА рдШреВрдорддрд╛ рд╣реИред
рдЯреНрд╡рд┐рди-рдПрдВрдЧ рд╢рд╛рдЦрд╛ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ
рдЬрд╛рд╡рд╛-рдпреВрдирд┐рд╡рд░реНрд╕рд▓-рдЯреНрд╡реАрди-рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ