рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП Google рдореИрдкреНрд╕ v2: рдлреБрд▓ рд░рд┐рдбреНрд░рд╛рд╕реНрдЯрд┐рдВрдЧ рдФрд░ рдЗрдирдкреБрдЯ рдЗрд╡реЗрдВрдЯ рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ

рдЫрд╡рд┐

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

рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ Google рдореИрдкреНрд╕ v2 рдХрдИ рдорд╛рдпрдиреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╡рд╣ рдХреМрди рд╕рд╛ MapFragment рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдЯреБрдХрдбрд╝реЛрдВ рдкрд░ рдмрдирд╛рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдореИрдк рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЯреНрд░рд┐рдлрд╝рд▓ рдХреЛ AndroidManifest.xml рдореЗрдВ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдХреБрдВрдЬреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ MapView рдореЗрдВ рдирд╣реАрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣реИред рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреИрд╕реА рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБред рд╕реМрдВрджрд░реНрдпред

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

рдпрд╣реА рд╣реИ, рдЖрдкрдХреЛ showInfoWindow() рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рдВрдбреЛ рдХреЛ рдлрд┐рд░ рд╕реЗ showInfoWindow() ред рдпрд╣, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдПрдХ рдЫрд╡рд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ ProgressBar рдЬрд┐рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдПрдХ View рдореЗрдВ рдПрдХ View рд░рд╛рдЬреНрдпреЛрдВ (рджрдмрд╛рдП рдЧрдП, рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд, рдЖрджрд┐) рдХреЛ рдХреИрд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВ?

рд╡рд╣рд╛рдВ рд╕реЗ:
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реВрдЪрдирд╛ рд╡рд┐рдВрдбреЛ рд╕реНрдкрд░реНрд╢ рдпрд╛ рд╣рд╛рд╡рднрд╛рд╡ рдШрдЯрдирд╛рдУрдВ рдЬреИрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧреАред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдк рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рд╡рд┐рдВрдбреЛ рдкрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд▓рд┐рдХ рдШрдЯрдирд╛ рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВред

рддреЛ, рдХреЛрдИ рдЗрдирдкреБрдЯ рдЗрд╡реЗрдВрдЯ рдирд╣реАрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рд╕рднреА рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдПрдХ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдВрдбреЛ рдХреЛ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ OnInfoWindowClickListener рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ OnInfoWindowClickListener рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рд╕реЗ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдПрдХ рдкреНрд░рд╢реНрди рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИред рд╕реНрд╡реАрдХреГрдд рдЙрддреНрддрд░ рдХреЗ рд▓реЗрдЦрдХ MapView рд▓рдкреЗрдЯрдХрд░ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░рд╛рдЬреНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЗрдирдкреБрдЯ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдмреЗрд╣рдж рдиреАрд░рд╕ рд╣реИ, рдФрд░ рдпрд╣ рд╕рдм рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЗрд╕ рдкрд░ рд╣рд╛рд░ рдорд╛рди рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдПрдХ рд░рд╛рд╕реНрддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдирдХреНрд╢реЗ рдХреЗ рдКрдкрд░ рдПрдХ рдФрд░ рдкрд░рдд рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдПрдХ рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ? рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рддрджрдиреБрд╕рд╛рд░ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдорд╛рд░реНрдХрд░ рдХреЛ "рдЯреНрд░реИрдХ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗред рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ View рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рдХреА рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ - рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред )ред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рд░реНрдХрдЕрдк рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ (рдмрд╛рдж рдореЗрдВ, рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдХрдИ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <FrameLayout android:id="@+id/container_map" android:layout_width="wrap_content" android:layout_height="wrap_content" > <!--  --> </FrameLayout> <AbsoluteLayout android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:id="@+id/container_popup" android:layout_x="0dp" android:layout_y="0dp" android:layout_width="wrap_content" android:layout_height="wrap_content" > <!--   --> </LinearLayout> </AbsoluteLayout> </RelativeLayout> 


рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
 public class MapFragment extends com.google.android.gms.maps.MapFragment { //    private static final int ANIMATION_DURATION = 500; //       private LatLng trackedPosition; //  ,       private int popupXOffset; private int popupYOffset; //  private int markerHeight; //,         private ViewTreeObserver.OnGlobalLayoutListener infoWindowLayoutListener; //   private View infoWindowContainer; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment, null); FrameLayout containerMap = (FrameLayout) rootView.findViewById(R.id.container_map); View mapView = super.onCreateView(inflater, container, savedInstanceState); containerMap.addView(mapView, new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)); infoWindowContainer= rootView.findViewById(R.id.container_popup); //      infoWindowLayoutListener = new InfoWindowLayoutListener(); infoWindowContainer.getViewTreeObserver().addOnGlobalLayoutListener(infoWindowLayoutListener ); return rootView; } @Override public void onDestroyView() { super.onDestroyView(); //   infoWindowContainer.getViewTreeObserver().removeGlobalOnLayoutListener(infoWindowLayoutListener ); } @Override public void onMapClick(LatLng latLng) { //          ,    infoWindowContainer.setVisibility(INVISIBLE); } @Override public boolean onMarkerClick(Marker marker) { //     //   GoogleMap map = getMap(); Projection projection = map.getProjection(); trackedPosition = marker.getPosition(); //  Point trackedPoint = projection.toScreenLocation(trackedPosition); trackedPoint.y -= popupYOffset / 2; LatLng newCameraLocation = projection.fromScreenLocation(trackedPoint); map.animateCamera(CameraUpdateFactory.newLatLng(newCameraLocation), ANIMATION_DURATION, null); //    //тАж infoWindowContainer.setVisibility(VISIBLE); return true; } private class InfoWindowLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener { @Override public void onGlobalLayout() { //  ,   popupXOffset = infoWindowContainer.getWidth() / 2; popupYOffset = infoWindowContainer.getHeight(); } } } 


рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣рд┐рд╕реНрд╕рд╛ рдирдХреНрд╢реЗ рдкрд░ рдорд╛рд░реНрдХрд░ рдХрд╛ "рдЯреНрд░реИрдХрд┐рдВрдЧ" рд╣реИред рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдЬреЛ рдорди рдореЗрдВ рдЖрдпрд╛ рдерд╛, рд╡рд╣ onTouchEvent() рдореЗрдВ рдЗрдирдкреБрдЯ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрдХрдбрд╝ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЙрд╕реА рд╕реНрдерд╛рди рдкрд░ рд╡рд┐рдВрдбреЛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рд░рд╣рд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рд╡рд┐рдзрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИ - рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЗрдирдкреБрдЯ рдШрдЯрдирд╛рдУрдВ рдХреЛ onTouchEvent() рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рдЭрдЯрдХреЗ рд╕реЗ рдЪрд▓рддреА рд╣реИред рдпрд╣ рдШреГрдгрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ - рдХреНрдпреЛрдВ рди рдирд┐рдпрдорд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЦрд┐рдбрд╝рдХреА рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП? Handler рдФрд░ рдорджрдж рдХрд░рдиреЗ рдпреЛрдЧреНрдп:

 public class MapFragment extends com.google.android.gms.maps.MapFragment { //    . //   60 fps,   1000 ms / 60 = 16 ms  . private static final int POPUP_POSITION_REFRESH_INTERVAL = 16; //Handler,       private Handler handler; //Runnable,     private Runnable positionUpdaterRunnable; @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); handler = new Handler(Looper.getMainLooper()); positionUpdaterRunnable = new PositionUpdaterRunnable(); //   handler.post(positionUpdaterRunnable); } @Override public void onDestroyView() { super.onDestroyView(); // handler.removeCallbacks(positionUpdaterRunnable); handler = null; } private class PositionUpdaterRunnable implements Runnable { private int lastXPosition = Integer.MIN_VALUE; private int lastYPosition = Integer.MIN_VALUE; @Override public void run() { //      handler.postDelayed(this, POPUP_POSITION_REFRESH_INTERVAL); //   ,    if (trackedPosition != null && infoWindowContainer.getVisibility() == VISIBLE) { Point targetPosition = getMap().getProjection().toScreenLocation(trackedPosition); //    ,    if (lastXPosition != targetPosition.x || lastYPosition != targetPosition.y) { //  overlayLayoutParams = (AbsoluteLayout.LayoutParams) infoWindowContainer.getLayoutParams(); overlayLayoutParams.x = targetPosition.x - popupXOffset; overlayLayoutParams.y = targetPosition.y - popupYOffset - markerHeight; infoWindowContainer.setLayoutParams(overlayLayoutParams); //   lastXPosition = targetPosition.x; lastYPosition = targetPosition.y; } } } } } 


рдпрд╣ рдХреНрдпрд╛ рдЖрдпрд╛ - рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╡реАрдбрд┐рдпреЛ рдХреЛ рджреЗрдЦреЗрдВред


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдФрд░ рдПрдореБрд▓реЗрдЯрд░ рджреЛрдиреЛрдВ рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реАрдбрд┐рдпреЛ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред 4.4.2 рдХреЗ рд╕рд╛рде рдиреЗрдХреНрд╕рд╕ 7 2013 рдХреЗ рдЯреЗрд╕реНрдЯ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЬрдм рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИ, рддреЛ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдХреА рдЪрд┐рдХрдирд╛рдИ рдереЛрдбрд╝реА рдмрд┐рдЧрдбрд╝ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ 4.4.2 рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрд░рд╛рдиреЗ Nexus S рдкрд░ рднреА рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред

рдХреЛрдб GitHub: github.com/deville/info-window-demo рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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


All Articles