如何停止来自Blinking Android的标记

时间:2015-06-06 12:16:23

标签: android google-maps

在我的应用程序中,我动态跟踪18个人它工作正常没问题但有时标记开始只闪烁黑色一个驱动程序标记和成员制造商之一不闪烁这是在第一行标记 我的标记代码在这里 lat lng速度参数是驱动程序 和gpsLatLng.1,2,3 ......等都是成员 我想我在这里做的很多数学选项可能是

private void gotoLocation(double lat , double lng ,double speed){
    //LatLng ll = new LatLng(lat, lng);
    //CameraUpdate update = CameraUpdateFactory.newLatLngZoom(ll, zoom);
    //mMap.animateCamera(update);
    SessionManager sm =new SessionManager(getApplicationContext());

    HashMap<String, String> user = sm.getUserDetails();
    final String m_type = user.get(SessionManager.KEY_TYPE);


    if(Integer.parseInt(m_type)!=1){
if(d_marker!=null){
        d_marker.remove();
}

    }else{
        //if not
        setMarker_driver(gpsLatLng.d_name, lat, lng,speed);

    }

    if(gpsLatLng.m1_lat!=0.0){
        setMarker_m1(gpsLatLng.m1_name,gpsLatLng.m1_lat, gpsLatLng.m1_lng,gpsLatLng.m1_speed);
    }

    if(gpsLatLng.m2_lat!=0.0){
        setMarker_m2(gpsLatLng.m2_name,gpsLatLng.m2_lat, gpsLatLng.m2_lng,gpsLatLng.m2_speed);
    }
    if(gpsLatLng.m3_lat!=0.0){
        setMarker_m3(gpsLatLng.m3_name,gpsLatLng.m3_lat, gpsLatLng.m3_lng,gpsLatLng.m3_speed);
    }
    if(gpsLatLng.m4_lat!=0.0){
        setMarker_m4(gpsLatLng.m4_name,gpsLatLng.m4_lat, gpsLatLng.m4_lng,gpsLatLng.m4_speed);
    }
    if(gpsLatLng.m5_lat!=0.0){
        setMarker_m5(gpsLatLng.m5_name,gpsLatLng.m5_lat, gpsLatLng.m5_lng,gpsLatLng.m5_speed);
    }
    if(gpsLatLng.m6_lat!=0.0){
        setMarker_m6(gpsLatLng.m6_name,gpsLatLng.m6_lat, gpsLatLng.m6_lng,gpsLatLng.m6_speed);
    }
    if(gpsLatLng.m7_lat!=0.0){
        setMarker_m7(gpsLatLng.m7_name,gpsLatLng.m7_lat, gpsLatLng.m7_lng,gpsLatLng.m7_speed);
    }
    if(gpsLatLng.m8_lat!=0.0){
        setMarker_m8(gpsLatLng.m8_name,gpsLatLng.m8_lat, gpsLatLng.m8_lng,gpsLatLng.m8_speed);
    }
    if(gpsLatLng.m9_lat!=0.0){
        setMarker_m9(gpsLatLng.m9_name,gpsLatLng.m9_lat, gpsLatLng.m9_lng,gpsLatLng.m9_speed);
    }
    if(gpsLatLng.m10_lat!=0.0){
        setMarker_m10(gpsLatLng.m10_name,gpsLatLng.m10_lat, gpsLatLng.m10_lng,gpsLatLng.m10_speed);
    }
    if(gpsLatLng.m11_lat!=0.0){
        setMarker_m11(gpsLatLng.m11_name,gpsLatLng.m11_lat, gpsLatLng.m11_lng,gpsLatLng.m11_speed);
    }
    if(gpsLatLng.m12_lat!=0.0){
        setMarker_m12(gpsLatLng.m12_name,gpsLatLng.m12_lat, gpsLatLng.m12_lng,gpsLatLng.m12_speed);
    }
    if(gpsLatLng.m13_lat!=0.0){
        setMarker_m13(gpsLatLng.m13_name,gpsLatLng.m13_lat, gpsLatLng.m13_lng,gpsLatLng.m13_speed);
    }
    if(gpsLatLng.m14_lat!=0.0){
        setMarker_m14(gpsLatLng.m14_name,gpsLatLng.m14_lat, gpsLatLng.m14_lng,gpsLatLng.m14_speed);
    }
    if(gpsLatLng.m15_lat!=0.0){
        setMarker_m15(gpsLatLng.m15_name,gpsLatLng.m15_lat, gpsLatLng.m15_lng,gpsLatLng.m15_speed);
    }
    if(gpsLatLng.m16_lat!=0.0){
        setMarker_m16(gpsLatLng.m16_name,gpsLatLng.m16_lat, gpsLatLng.m16_lng,gpsLatLng.m16_speed);
    }




}
/*private void gotoCurrentLocation(){

    Location currentLocation = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);
    if(currentLocation == null){
        Toast.makeText(getApplicationContext(), "location is not aviable", Toast.LENGTH_LONG).show();
        marker=null;
    }else{
        LatLng ll = new LatLng((currentLocation).getLatitude(),(currentLocation).getLongitude());
        CameraUpdate update = CameraUpdateFactory.newLatLngZoom(ll, Zoom);
        mMap.animateCamera(update);
        if (marker != null) {
            marker.remove();
        }
            setMarker(TITLE, ll.latitude, ll.longitude);
         //option1 = new MarkerOptions().title("me").position(ll);
        //marker = mMap.addMarker(option1);

        // i got my point right here brotherssss just add the makerx of our van which will update in 5 seconds
    }
}*/


private void setMarker_m1(String locality, double lat, double lng,double speed) {


    if(m1!= null){
        m1.remove();

    }
    MarkerOptions options = Moptions(locality, lat,  lng, speed);
    m1 = mMap.addMarker(options);



}
private void setMarker_m2(String locality, double lat, double lng,double speed) {


    if(m2!= null){
        m2.remove();

    }
    MarkerOptions options = Moptions(locality, lat,  lng, speed);
    m2 = mMap.addMarker(options);



}
private void setMarker_m3(String locality, double lat, double lng,double speed) {


    if(m3!= null){
        m3.remove();

    }
    MarkerOptions options = Moptions(locality, lat,  lng, speed);
    m3 = mMap.addMarker(options);



}
private void setMarker_m4(String locality, double lat, double lng,double speed) {


    if(m4!= null){
        m4.remove();

    }
    MarkerOptions options = Moptions(locality, lat,  lng, speed);
    m4 = mMap.addMarker(options);



}
private void setMarker_m5(String locality, double lat, double lng,double speed) {


    if(m5!= null){
        m5.remove();

    }
    MarkerOptions options = Moptions(locality, lat,  lng, speed);
    m5 = mMap.addMarker(options);



}
private void setMarker_m6(String locality, double lat, double lng,double speed) {


    if(m6!= null){
        m6.remove();

    }
    MarkerOptions options = Moptions(locality, lat,  lng, speed);
    m6 = mMap.addMarker(options);



}
private void setMarker_m7(String locality, double lat, double lng,double speed) {


    if(m7!= null){
        m7.remove();

    }
    MarkerOptions options = Moptions(locality, lat,  lng, speed);
    m7 = mMap.addMarker(options);



}
private void setMarker_m8(String locality, double lat, double lng,double speed) {


    if(m8!= null){
        m8.remove();

    }
    MarkerOptions options = Moptions(locality, lat,  lng, speed);
    m8 = mMap.addMarker(options);



}
private void setMarker_m9(String locality, double lat, double lng,double speed) {


    if(m9!= null){
        m9.remove();

    }
    MarkerOptions options = Moptions(locality, lat,  lng, speed);
    m9 = mMap.addMarker(options);



}

private void setMarker_m10(String locality,double lat,double lng,double speed){

    if(m10!= null){
        m10.remove();

    }
    MarkerOptions options = Moptions(locality, lat,  lng, speed);
    m10 = mMap.addMarker(options);



}

private void setMarker_m11(String locality,double lat,double lng,double speed){

if(m11!= null){
    m11.remove();

}
MarkerOptions options = Moptions(locality, lat,  lng, speed);
m11 = mMap.addMarker(options);

} private void setMarker_m12(String locality,double lat,double lng,double speed){

if(m12!= null){
    m12.remove();

}
MarkerOptions options = Moptions(locality, lat,  lng, speed);
m12 = mMap.addMarker(options);

} private void setMarker_m13(String locality,double lat,double lng,double speed){

if(m13!= null){
    m13.remove();

}
MarkerOptions options = Moptions(locality, lat,  lng, speed);
m13 = mMap.addMarker(options);

} private void setMarker_m14(String locality,double lat,double lng,double speed){

if(m14!= null){
    m14.remove();

}
MarkerOptions options = Moptions(locality, lat,  lng, speed);
m14 = mMap.addMarker(options);

} private void setMarker_m15(String locality,double lat,double lng,double speed){

if(m15!= null){
    m15.remove();

}
MarkerOptions options = Moptions(locality, lat,  lng, speed);
m15 = mMap.addMarker(options);

} private void setMarker_m16(String locality,double lat,double lng,double speed){

if(m16!= null){
    m9.remove();

}
MarkerOptions options = Moptions(locality, lat,  lng, speed);
m16 = mMap.addMarker(options);

} private void setMarker_driver(String locality,double lat,double lng,double speed){

Location targetLocation = new Location("");//provider name is unecessary
targetLocation.setLatitude(lat);//your coords of course
targetLocation.setLongitude(lng);
double distance=0;
double time=0;
try{
distance =my_location.distanceTo(targetLocation)/1000;
speed=speed*3600/1000;
time = distance/speed;
time=time/60;
time = Math.floor( time* 100) / 100;
distance = Math.floor(distance* 100) / 100;
speed = Math.floor(speed* 100) / 100;
}catch(Exception e){

}



    if(d_marker!= null){

        d_marker.remove();

    }
    //+"km ,time: "+time
    MarkerOptions options = new MarkerOptions()
    .title(locality)

    .position(new LatLng(lat, lng))
    .snippet("Speed: "+Double.toString(speed)+"km/h" +",Distance: "+distance)
    .alpha(0.7f)

    .icon(BitmapDescriptorFactory.fromResource(R.drawable.m_stop));
    //.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
    d_marker = mMap.addMarker(options);


}

private MarkerOptions Moptions(String locality,double lat,double lng,double speed){     位置targetLocation =新位置(&#34;&#34;); //提供商名称是不必要的     targetLocation.setLatitude(lat); //你的坐标当然是// +&#34; km,时间:&#34; +时间     targetLocation.setLongitude(LNG);     双倍距离= 0;     双倍时间;     尝试{     distance = my_location.distanceTo(targetLocation)/ 1000;     速度=速度*一千分之三千六百;     时间=距离/速度;     时间=时间/ 60;     time = Math.floor(时间* 100)/ 100;     距离= Math.floor(距离* 100)/ 100;     速度= Math.floor(速度* 100)/ 100;     } catch(例外e){

}
MarkerOptions options = new MarkerOptions()
.title(locality)
.position(new LatLng(lat, lng))
.snippet("Speed: "+Double.toString(speed)+"km/h" +",Distance: "+distance)
.alpha(0.7f)

.icon(BitmapDescriptorFactory.fromResource(R.drawable.m_moving));

return options;
}

`

5 个答案:

答案 0 :(得分:3)

你做不到。 switch只能测试确切的值。

你可以这样做:

switch(array.length) {
case 0: case 1: case 2: case 3:
case 4: case 5: case 6: case 7:
case 8: case 9: case 10: case 11:
    // do stuff
    break;
default:
    break;
}

为什么你想这样做?是什么让你觉得它更快?

答案 1 :(得分:0)

switchif (...) { ... } else { ... }不同。您只能在==内使用case。你必须做这样的事情:

int length = array.length;
switch (length) {
    case 0:
    case 1:
    case 2:
    [...]
    case 11:
        // your code here
        break;
    //other cases here
}

注意缺少的break - 语句,它们非常重要。 我建议this tutorial了解更多详情。

答案 2 :(得分:0)

您无法使用switch执行此操作(根据您的示例)。由于case的值是常量表达式(case *value*)。

答案 3 :(得分:0)

Switch语句按照完全匹配而非if之类的比较进行操作。你可以通过引入一个像这样的新变量来做你想做的事情:

int value = (array.length <= 11 ? 0 : (array.length <= 20 ? 1 : 2));
switch (value) {
    case 0:  // 11 or under
    break;
    case 1:  // 12 to 20
    break;
    case 2:  // 21 or more
    break;
}

我不知道这是否比if / else语句更能为您买单,但如果您发现代码更清晰,则可以执行此操作。

答案 4 :(得分:0)

在您的if / elseif中,if(array.length<=10)将永远不会运行,因为如果在其上方检查了(array.length<=15)

使用if / elseif结构执行此操作将需要更少的代码行。 如果你想使用switch / case语句这样做,这将有效:

int length = array.length;

    switch(length) {
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5: {
        System.out.println("Case 0<=length<=5 triggered.");
        break;
    }
    case 6:
    case 7:
    case 8:
    case 9:
    case 10: {
        System.out.println("Case 6<=length<=10 triggered.");
        break;
    }
    case 11:
    case 12:
    case 13:
    case 14:
    case 15: {
        System.out.println("Case 10<=length<=15 triggered.");
        break;
    }
    default: {
        System.out.println("Default case triggered.");
    }
    }