【问题标题】:Add animation to default marker on setOnMarkerClickListener maps api v2 android将动画添加到 setOnMarkerClickListener maps api v2 android 上的默认标记
【发布时间】:2019-05-29 14:30:15
【问题描述】:

我正在开发一个 android 应用程序,其中有包含 Mapview 的片段... 根据本地数据库中的位置包含标记的地图视图.. 有什么方法可以动画甚至更改仅单击标记的颜色? 我的意思是我已经在 setOnMarkerClickListener 中完成了,但是,当我点击另一个标记时,前一个标记仍然是相同的颜色/动画......

添加下面代码的主要部分...

String myPath = DB_PATH + DB_NAME;
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    Cursor c = myDataBase.rawQuery("Select * from location", null);
    if (c != null) {
        if (c.moveToFirst()) {
            do {
                id = c.getInt(0);
                if (userPrefs.getString("locale",null)==null || userPrefs.getString("locale",null).equals("en"))
                {
                    storename = c.getString(1);
                }
                else {
                    storename = c.getString(7);
                }
                stlatitude = c.getDouble(2);
                stlongitude = c.getDouble(3);
                city = c.getString(4);
                String emirate = c.getString(5);
                storeloc = new Location("StoreLocation");
                storeloc.setLatitude(stlatitude);
                storeloc.setLongitude(stlongitude);
                addmarker();
            }
            while (c.moveToNext());
        }
    }
    myDataBase.close();

    map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            String s= marker.getTitle();
            String snippet= marker.getSnippet();
            markerlat= marker.getPosition().latitude;
            markerlong= marker.getPosition().longitude;
            marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
            tv.setText(s);
            tv1.setText(snippet);
                if (s.equals(getActivity().getResources().getString(R.string.here))) {
                    if (relbutton.getVisibility() == View.VISIBLE && reltext.getVisibility() == View.VISIBLE) {
                        relbutton.setAlpha(1.0f);
                        relbutton.animate().translationY(0).alpha(0.0f);
                        relbutton.setVisibility(View.GONE);
                    } else if (relbutton.getVisibility() != View.VISIBLE && reltext.getVisibility() != View.VISIBLE) {
                        reltext.setVisibility(View.VISIBLE);
                        reltext.setAlpha(0.0f);
                        reltext.animate().translationY(0).alpha(1.0f);
                        if (userPrefs.getString("locale",null).equals("ar"))
                        {
                            RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.relativeLayout2);
                            relativeLayout.setGravity(Gravity.LEFT);
                            RelativeLayout relativeLayout1 = (RelativeLayout) view.findViewById(R.id.relativeLayout1);
                            relativeLayout1.setGravity(Gravity.RIGHT);
                        }
                    }

                } else if (relbutton.getVisibility() != View.VISIBLE && reltext.getVisibility() != View.VISIBLE) {
                    relbutton.setVisibility(View.VISIBLE);
                    reltext.setVisibility(View.VISIBLE);
                    reltext.setAlpha(0.0f);
                    reltext.animate().translationY(0).alpha(1.0f);
                    relbutton.setAlpha(0.0f);
                    relbutton.animate().translationY(0).alpha(1.0f);
                    if (userPrefs.getString("locale",null).equals("ar"))
                    {
                        RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.relativeLayout2);
                        relativeLayout.setGravity(Gravity.LEFT);
                        RelativeLayout relativeLayout1 = (RelativeLayout) view.findViewById(R.id.relativeLayout1);
                        relativeLayout1.setGravity(Gravity.RIGHT);
                    }
                } else if (reltext.getVisibility() == View.VISIBLE) {
                    relbutton.setVisibility(View.VISIBLE);
                    relbutton.setAlpha(0.0f);
                    relbutton.animate().translationY(0).alpha(1.0f);
                    if (userPrefs.getString("locale",null).equals("ar"))
                    {
                        RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.relativeLayout2);
                        relativeLayout.setGravity(Gravity.LEFT);
                        RelativeLayout relativeLayout1 = (RelativeLayout) view.findViewById(R.id.relativeLayout1);
                        relativeLayout1.setGravity(Gravity.RIGHT);
                    }
                }
            return true;
        }

    });


    directions.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            nwLocation = appLocationService.getLocation(LocationManager.NETWORK_PROVIDER);
            if(nwLocation!=null) {
                userlatitude = nwLocation.getLatitude();
                userlongitude = nwLocation.getLongitude();
            if(markerlat!=null && markerlong!=null) {
                String uri = "http://maps.google.com/maps?f=d&hl=en&saddr=" + userlatitude + "," + userlongitude + "&daddr=" + markerlat + "," + markerlong;
                Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse(uri));
                intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
                startActivity(intent);
            }
            }
            else {
                showSettingsAlert("NETWORK");
            }
        }
    });
    return  view;
}

private void addmarker() {
    markerOptions.position(new LatLng(stlatitude, stlongitude));
    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_VIOLET));
    markerOptions.title(getActivity().getResources().getString(R.string.xpressionsstyle));
    markerOptions.snippet(storename);
    map.addMarker(markerOptions);
}

【问题讨论】:

  • 您要在地图屏幕上绘制多少个标记??
  • 数据库中位置的数量...
  • 所有制造商都应该有不同的颜色??
  • nop... 除了用户位置标记和选定标记外,其他颜色相同...
  • ..请检查我的以下解决方案..

标签: android google-maps google-maps-markers


【解决方案1】:

您可以创建具有不同颜色名称的数组列表,例如 在 oncreateView 中使用这些行..

并保持整数值 int color_value =0; 并在标记点击事件上增加这些值;

int color_value = 0;
ArrayList<String> colours = new ArrayList<String>();
colours.add("HUE_RED");
colours.add("HUE_BLACK");
colours.add("HUE_BLUE");
colours.add("HUE_PINK");
colours.add("HUE_GRAY");
colours.add("HUE_YELLOW");
.
.
.
.
.
colours.add("HUE_GREEN");

然后 onMarkerClickListener 使用以下代码行并增加 color_value 的值;

public boolean onMarkerClick(Marker marker) {
for(int i =0;i<=colours.size();i++)
 {  
  if(color_value==i)
   {
    if(color_value==colours.size)
     {
      colur_value=0;
     }
     else
     {
      color_value++;//increment the value of color from here
     }
             marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.colours.get(i)));

 break;
  }
 }
}

【讨论】:

  • 这不是我要解释的事情...我只需要更改所选标记的颜色...如果用户选择另一个标记,则前一个标记的颜色应重置为默认颜色...
  • 这也是可能的..每当您单击标记标记时,您必须删除以前的标记并取而代之,您必须放置不同类型的标记颜色..
【解决方案2】:

我已经通过更改 onmarkerclick 代码来整理出解决方案,如下所示...

  public boolean onMarkerClick(Marker marker) {
            String s= marker.getTitle();
            String snippet= marker.getSnippet();
            markerlat= marker.getPosition().latitude;
            markerlong= marker.getPosition().longitude;
            if(prevmarker!=null){
                    if(!prevmarker.getTitle().equals(getActivity().getResources().getString(R.string.here)))
                {
                    prevmarker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_VIOLET));
                }
            }
            if (!s.equals(getActivity().getResources().getString(R.string.here))) {
                marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
            }

【讨论】:

    【解决方案3】:

    首先像这样在 oncreate 上定义标记

    makerDefault = this.getResources().getDrawable(R.drawable.marker_default);

    之后使用这个类 私有类 MyItemizedOverlay 扩展 ItemizedOverlay {

            private List<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
    
            public MyItemizedOverlay(Drawable defaultMarker) {
                super(boundCenterBottom(defaultMarker));
            }
    
            public void addOverlayItem(int lat, int lon, String title, Drawable altMarker) {
    
                GeoPoint point = new GeoPoint(lat, lon);
                OverlayItem overlayItem = new OverlayItem(point, title, null);
                addOverlayItem(overlayItem, altMarker);
            }
    
            public void addOverlayItem(OverlayItem overlayItem) {
                mOverlays.add(overlayItem);
                populate();
            }
    
            public void addOverlayItem(OverlayItem overlayItem, Drawable altMarker) {
                overlayItem.setMarker(boundCenterBottom(altMarker));
                addOverlayItem(overlayItem);
            }
    
            @Override
            protected OverlayItem createItem(int i) {
                return mOverlays.get(i);
            }
    
            @Override
            public int size() 
            {
                return mOverlays.size();
            }
    
            @Override
            protected boolean onTap(int index) {
               // Toast.makeText(LocationActivity.this, getItem(index).getTitle(), Toast.LENGTH_LONG).show();
                Intent intent=new Intent(LocationActivity.this, PlaceOrderActivity.class);              
                intent.putExtra("shop_no", getItem(index).getTitle());
    
    
                startActivity(intent);  
                return true;
            }
    
        }
    

    之后像这样绑定你的数据 MyItemizedOverlay itemizedOverlay = new MyItemizedOverlay(makerDefault);

                           JSONArray array=     new JSONArray(data);
                           String da=String.valueOf(array.length());
                           Log.d("da", da);
                             for(int i=0;i<array.length();i++){
                                 JSONObject jsonObject = array.getJSONObject(i);
                                 Log.d("jsonObject", jsonObject.toString());
                                 shopname=jsonObject.getString("0");                                                            
                                 latitude=jsonObject.getString("1");
                                 longitude=jsonObject.getString("2");
                                 shop_no=jsonObject.getString("3");
                                 Log.d("shopname", shopname);
    
                                    mc = mapView.getController();                               
                                    double dbl_latitude = Double.parseDouble(latitude);
                                    int Lat = (int)(dbl_latitude * 1E6);                                                            
                                    double dbl_longitude = Double.parseDouble(longitude);
                                    int Lon = (int)(dbl_longitude* 1E6);
    
                                    itemizedOverlay.addOverlayItem(Lat, Lon, shop_no, makerDefault);
                                     mapView.getOverlays().add(itemizedOverlay);
                                    mc.setCenter(new GeoPoint(Lat, Lon)); 
                                    //Toast.makeText(getApplicationContext(), Lat+""+Lon, 3000).show();
                                    mc.zoomToSpan(itemizedOverlay.getLatSpanE6(), itemizedOverlay.getLonSpanE6());
    

    在此您必须使用您想要的颜色放置多个图像

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 2013-01-29
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      相关资源
      最近更新 更多