2016-06-07 2 views
2

지도에 차량을 표시 할 때 차량을 클릭하면 정보 창이 표시되지만 차량을 두 번 클릭해야 새로운 페이지로 이동합니다. t 수행하는 방법을 알고, 도와주세요 me.here는 현재 당신이 onMarkerClick API를 사용하여 마커의 클릭 한 번에 활동을 시작하는 내 코드안드로이드 응용 프로그램에서 마커를 두 번 클릭하면 어떻게 처리 할 수 ​​있습니까?

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback,GoogleMap.OnMarkerClickListener { 

     GoogleMap mMap; 
     RequestQueue requestQueue; 
     ArrayList<LatLng> points = null; 
     PolylineOptions polylineOptions; 
     Geocoder geocoder; 
     LocationListener locationListener; 
     TextView tv,tv_one,tv_two; 
     String string; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_maps); 
      SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
        .findFragmentById(R.id.map); 
      mapFragment.getMapAsync(this); 
      points = new ArrayList<LatLng>(); 
      polylineOptions = new PolylineOptions(); 
      String URL = "http://b2ss2c.com/gtsapi/index.php?cmd=VEHICLE_DETAILS&deviceID=salim_fiat&accountID=gts&fromDate=23-May-2016&toDate=24-May-2016"; 
      final JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(URL, new Response.Listener<org.json.JSONArray>() { 
       @Override 
       public void onResponse(org.json.JSONArray response) { 
        for (int i = 0; i < response.length(); i++) { 

         try { 
          JSONObject jsonObject1 = response.getJSONObject(i); 
          String speed=jsonObject1.getString("speed"); 
          String deviceID=jsonObject1.getString("deviceID"); 
          String altitude=jsonObject1.getString("altitude"); 
          String fuelLevel=jsonObject1.getString("fuelLevel"); 
          LatLng latLng = new LatLng(jsonObject1.getDouble("latitude"),jsonObject1.getDouble("longitude")); 
          BitmapDescriptor image = BitmapDescriptorFactory.fromResource(R.drawable.car); 
          mMap.setOnMarkerClickListener(MapsActivity.this); 
          Marker marker= mMap.addMarker(new MarkerOptions().position(latLng).icon(image)); 
          marker.setTitle("DeviceID:"+deviceID+"\n"+"Speed:"+speed+"\n"+"Altitude:"+altitude+"\n"+"FuelLevel:"+fuelLevel); 
          mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 16)); 
          points.add(latLng); 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
        polylineOptions.addAll(points); 
        polylineOptions.width(4); 
        polylineOptions.color(Color.BLUE); 
        mMap.addPolyline(polylineOptions); 
       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 

       } 
      }); 
      requestQueue = Volley.newRequestQueue(this); 
      requestQueue.add(jsonArrayRequest); 
     } 
     @Override 
     public boolean onMarkerClick(Marker marker) { 
      geocoder=new Geocoder(getApplicationContext(), Locale.getDefault()); 
      if (Geocoder.isPresent()){ 
       try{ 
        List<Address> addresses=geocoder.getFromLocation(marker.getPosition().latitude,marker.getPosition().longitude,1); 
        if (addresses!=null && addresses.size()>0) { 
         android.location.Address address = addresses.get(0); 
         string = String.format("%s %s %s", address.getAddressLine(0),address.getSubLocality(),address.getLocality(), 
           address.getAdminArea(),address.getCountryName()); 
         String title=marker.getTitle(); 
         marker.setSnippet(title+"\n"+"Address:"+string); 
         marker.showInfoWindow(); 
        }else { 
         Toast.makeText(getApplicationContext(),"Address not found",Toast.LENGTH_SHORT).show(); 
        } 
       }catch (IOException e){ 
        e.printStackTrace(); 
       } 

      } 
      return false; 
     } 

     @Override 
     public void onMapReady(GoogleMap googleMap) { 
      mMap = googleMap; 

      mMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { 
       @Override 
       public View getInfoWindow(Marker marker) { 
        return null; 
       } 

       @Override 
       public View getInfoContents(Marker marker) { 
        View view=getLayoutInflater().inflate(R.layout.info_window,null); 
        tv=(TextView)view.findViewById(R.id.tv_address); 
        tv_one=(TextView)view.findViewById(R.id.tv_one); 
        tv_two=(TextView)view.findViewById(R.id.tv_two); 
        String snippet= marker.getSnippet(); 
        tv_one.setText(snippet); 
        return view; 
       } 
      }); 

     } 


    } 

답변

0

입니다. 왜 타이머 메커니즘을 사용하면 클릭 수를 기록 할 수 없습니다. 다음 단계에서 수행 할 수 있습니다.

  1. 마침표의 기록 시간은 &입니다.
  2. 마커에서 클릭 이벤트가 발생할 때마다. ID가 이전 ID와 동일하고 두 이벤트 사이의 시간이 특정 임계 값보다 작은 지 확인하십시오.
  3. 예인 경우 활동을 실행하십시오.
  4. 아니요 인 경우 저장된 ID를 지우고 새 ID를 지우고 시간도 기록하십시오.
+0

재생 해 주셔서 감사합니다. 확인해 보겠습니다. @ 네지 –

+0

작동 했습니까 ?? – Neji

+0

아직도 내가 그것에 대해 노력하고있다 –

관련 문제