簡體   English   中英

如何在標記中顯示地點名稱?

[英]How can I show the name of the place in marker?

我正在嘗試在標記中顯示地點的名稱。 我正在應用某人的代碼,並希望將價格更改為名稱。

我試圖更改一些行,但是結果不是我想要的。

  1. MarkerFromLatLong2.java

      public class MarkerFromLatLong2 extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnMarkerClickListener, GoogleMap.OnMapClickListener { String myJSON; public static final String TAG_RESULTS = "result"; public static final String TAG_LAT = "lat"; public static final String TAG_LON = "lon"; String lat; String lon; String price; char a, b, c, d, e; JSONArray reservedtimes = null; ArrayList<HashMap<String, String>> latlonList; Marker selectedMarker; View marker_root_view; TextView tv_marker; public GoogleMap mMap; final Context context = this; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); lat = new String(); lon = new String(); myJSON = new String(); latlonList = new ArrayList<HashMap<String, String>>(); getData("http://MY ADDRESS/getdata.php"); } public void getData(String url) { class GetDataJSON extends AsyncTask<String, Void, String> { @Override public String doInBackground(String... params) { String uri = params[0]; BufferedReader bufferedReader = null; try { URL url = new URL(uri); HttpURLConnection con = (HttpURLConnection) url.openConnection(); StringBuilder sb = new StringBuilder(); bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream())); String json; while ((json = bufferedReader.readLine()) != null) { sb.append(json + "\\n"); } return sb.toString().trim(); } catch (Exception e) { return null; } } @Override public void onPostExecute(String result) { myJSON = result; showList(); } } GetDataJSON g = new GetDataJSON(); g.execute(url); } public void showList() { try { JSONObject jsonObj = new JSONObject(myJSON); reservedtimes = jsonObj.getJSONArray(TAG_RESULTS); for (int i = 0; i < reservedtimes.length(); i++) { JSONObject c = reservedtimes.getJSONObject(i); lat = c.getString(TAG_LAT); lon = c.getString(TAG_LON); HashMap<String, String> location = new HashMap<>(); location.put(TAG_LAT, lat); location.put(TAG_LON, lon); latlonList.add(location); } } catch (JSONException e) { e.printStackTrace(); } }//여기까지 @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.546167, 126.964673), 16)); mMap.setOnMarkerClickListener(this); mMap.setOnMapClickListener(this); setCustomMarkerView(); getSampleMarkerItems(); } public void setCustomMarkerView() { marker_root_view = LayoutInflater.from(this).inflate(R.layout.marker_layout, null); tv_marker = (TextView) marker_root_view.findViewById(R.id.tv_marker); } public void getSampleMarkerItems() { ArrayList<MarkerItem> sampleList = new ArrayList(); /*sampleList.add(new MarkerItem(Double.valueOf(lat), Double.valueOf(lon), 1906)); sampleList.add(new MarkerItem(37.546167, 126.96568, 1906)); sampleList.add(new MarkerItem(37.538523, 126.96568, 2500000)); sampleList.add(new MarkerItem(37.527523, 126.96568, 100000)); sampleList.add(new MarkerItem(37.549523, 126.96568, 15000)); sampleList.add(new MarkerItem(37.538523, 126.95768, 5000));*/ Intent intent = getIntent(); Double latitude = intent.getDoubleExtra("lat", 000.000000D); Double longitude = intent.getDoubleExtra("lon", 000.000000D); Character price = intent.getCharExtra("price", (char) 123); sampleList.add(new MarkerItem(latitude, longitude, price)); //sampleList.add(new MarkerItem(37.546167, 126.964673, 1906)); sampleList.add(new MarkerItem(37.538523, 126.96568, b)); sampleList.add(new MarkerItem(37.527523, 126.96568, c)); sampleList.add(new MarkerItem(37.549523, 126.96568, d)); sampleList.add(new MarkerItem(37.538523, 126.95768, e)); for (MarkerItem markerItem : sampleList) { addMarker(markerItem, false); } } //get the lat and lon in order // public Marker addMarker(MarkerItem markerItem, boolean isSelectedMarker) { LatLng position = new LatLng(markerItem.getLat(), markerItem.getLon()); char price = markerItem.getPrice(); //String formatted = NumberFormat.getInstance().format((price)); //only shows 0(zero) //String formatted = String.format(String.valueOf(price)); //shows nothing(blank) in marker String formatted = NumberFormat.getInstance().format((price)); //only shows 0(zero) tv_marker.setText(formatted); if (isSelectedMarker) { tv_marker.setBackgroundResource(R.drawable.ic_marker_phone_blue); tv_marker.setTextColor(Color.WHITE); } else { tv_marker.setBackgroundResource(R.drawable.ic_marker_phone); tv_marker.setTextColor(Color.BLACK); } MarkerOptions markerOptions = new MarkerOptions(); //markerOptions.title(Integer.toString(price)); // If I delete or change the code, the app stops after I click the marker. markerOptions.title(Integer.toString(price)); // If I delete or change the code, the app stops after I click the marker. markerOptions.position(position); markerOptions.icon(BitmapDescriptorFactory.fromBitmap(createDrawableFromView(this, marker_root_view))); return mMap.addMarker(markerOptions); } // change the View to Bitmap public Bitmap createDrawableFromView(Context context, View view) { DisplayMetrics displayMetrics = new DisplayMetrics(); ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); view.measure(displayMetrics.widthPixels, displayMetrics.heightPixels); view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels); view.buildDrawingCache(); Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); view.draw(canvas); return bitmap; } public Marker addMarker(Marker marker, boolean isSelectedMarker) { double lat = marker.getPosition().latitude; double lon = marker.getPosition().longitude; char price = (char) Integer.parseInt(marker.getTitle()); MarkerItem temp = new MarkerItem(lat, lon, price); return addMarker(temp, isSelectedMarker); } @Override public boolean onMarkerClick(Marker marker) { //If I click a marker, move my center position to equal the marker's position. CameraUpdate center = CameraUpdateFactory.newLatLng(marker.getPosition()); mMap.animateCamera(center); changeSelectedMarker(marker); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); alertDialogBuilder.setTitle("SP #1") .setMessage("Want to reserve?\\n") .setCancelable(false) .setPositiveButton("Reserve", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //Moving to the reservation screen Intent intent = new Intent(MarkerFromLatLong2.this, ReserveActivity.class); startActivity(intent); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //cancel the dialog dialog.cancel(); } }); //make a dialog AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show(); return true; } public void changeSelectedMarker(Marker marker) { // return the marker which was selected by user if (selectedMarker != null) { addMarker(selectedMarker, false); selectedMarker.remove(); } // point the marker selected if (marker != null) { selectedMarker = addMarker(marker, true); marker.remove(); } } @Override public void onMapClick(LatLng latLng) { changeSelectedMarker(null); } } //If user clicks the map where the marker doesn't exist, the map turns back to the starting status. 
  2. MarkerItem.java

     public class MarkerItem { double lat; double lon; char price; public MarkerItem(double lat, double lon, char price) { this.lat = lat; this.lon = lon; this.price = price; } public double getLat() { return lat; } public void setLat(double lat) { this.lat = lat; } public double getLon() { return lon; } public void setLon(double lon) { this.lon = lon; } public char getPrice() { return price; } public void setPrice(char price) { this.price = price; } } 

當我編輯markerOptions.title(Integer.toString(price))行時,這是日志記錄器。 到markerOptions.title(“ KFC”);

I / dalvikvm:找不到方法android.content.pm.PackageManager.getPackageInstaller,從方法com.google.android.gms.common.zze.zzs引用W / dalvikvm:VFY:無法解析虛擬方法598:Landroid / content /pm/PackageManager;.getPackageInstaller()Landroid / content / pm / PackageInstaller; D / dalvikvm:VFY:在0x001b I / zzai處替換操作碼0x6e:動態創建Creator D / dalvikvm:DexOpt:找不到靜態字段Landroid / os / Build; .SUPPORTED_64_BIT_ABIS W / dalvikvm:VFY:無法解析靜態字段784 (SUPPORTED_64_BIT_ABIS)在Landroid / os / Build中; D / dalvikvm:VFY:在0x0008處替換操作碼0x62 D / dalvikvm:DexOpt:找不到靜態字段Landroid / os / Build; .SUPPORTED_ABIS W / dalvikvm:VFY:無法解析Landroid / os中的靜態字段785(SUPPORTED_ABIS) /建立; D / dalvikvm:VFY:在0x0008處替換操作碼0x62 D / dalvikvm:DexOpt:找不到靜態字段Landroid / os / Build; .SUPPORTED_64_BIT_ABIS W / dalvikvm:VFY:無法解析Landroid / os中的靜態字段784(SUPPORTED_64_BIT_ABIS) /建立; D / dalvikvm:VFY:在0x0012處替換操作碼0x62 D / dalvikvm:DexOpt:找不到靜態字段Landroid / os / Build; .SUPPORTED_32_BIT_ABIS W / dalvikvm:VFY:無法解析Landroid / os中的靜態字段783(SUPPORTED_32_BIT_ABIS) /建立; D / dalvikvm:VFY:在0x0021處替換操作碼0x62 D / dalvikvm:DexOpt:找不到靜態字段Landroid / os / Build; .SUPPORTED_64_BIT_ABIS I / dalvikvm:DexOpt:無法優化Lcom / google中0x0d的靜態字段ref 0x0310 /android/chimera/container/internal/NativeLibUtils;.a D / dalvikvm:DexOpt:找不到靜態字段Landroid / os / Build; .SUPPORTED_64_BIT_ABIS I / dalvikvm:DexOpt:無法優化Lcom中0x17的靜態字段參考0x0310 /google/android/chimera/container/internal/NativeLibUtils;.getSupportedAbisForCurrentRuntime D / dalvikvm:DexOpt:找不到靜態字段Landroid / os / Build; .SUPPORTED_32_BIT_ABIS I / dalvikvm:DexOpt:無法在0x26優化靜態字段參考0x030f在Lcom / google / android / chimera / container / internal / NativeLibUtils; .getSupportedAbisForCurrentRuntime I / PersonaManager中:getPersonaService()名稱persona_policy I / dalvikvm:找不到方法android.content.ContextWrapper.createCredentialProtectedStorageContext,該方法是從com.google方法引用的。 。 chimera.ModuleContext.createCredentialProtectedStorageContext W / dalvikvm:VFY:無法解析虛擬方法2232:Landroid / content / ContextWrapper; .createCredentialProtectedStorageContext()Landroid / content / Context; D / dalvikvm:VFY:在0x0002處替換操作碼0x6f I / dalvikvm:找不到方法android.content.ContextWrapper.createDeviceProtectedStorageContext,從方法com.google.android.chimera.ModuleContext.createDeviceProtectedStorageContext引用W / dalvikvm:VFY:無法解析虛方法2233:Landroid / content / ContextWrapper; .createDeviceProtectedStorageContext()Landroid / content / Context; D / dalvikvm:VFY:在0x0002 W / f處替換操作碼0x6f:禁止違反StrictMode策略:StrictModeDiskReadViolation I / Google Maps Android API:Google Play服務客戶端版本:9877000 I / Google Maps Android API:Google Play服務軟件包版本:10084030 I / dalvikvm:找不到方法android.content.pm.PackageManager.getPackageInstaller,從方法kx.a引用W / dalvikvm:VFY:無法解析虛擬方法2017:Landroid / content / pm / PackageManager; .getPackageInstaller()Landroid /內容/ PM / PackageInstaller; D / dalvikvm:VFY:在0x001c處替換操作碼0x6e W / f:抑制了StrictMode策略違反:StrictModeDiskReadViolation W / f:抑制了StrictMode策略違反:StrictModeDiskReadViolation W / f:抑制了StrictMode策略違反:StrictModeDiskReadViolation W / f StrictModeDiskReadViolation W / f:禁止的StrictMode策略違反:StrictModeDiskReadViolation W / f:禁止的StrictMode策略違反:StrictModeDiskReadViolation W / f:禁止的StrictMode策略違反:StrictModeDiskReadViolation W / f:禁止的StrictMode策略違反:StrictMode策略違反: StrictModeDiskWriteViolation W / f:禁止違反StrictMode策略:StrictModeDiskReadViolation E / dalvikvm:找不到方法“ lq.b”引用的類“ com.google.android.chimera.Activity”。W / dalvikvm:VFY:無法解析instanceof 600(Lcom / llq中的/ google / android / chimera / Activity;); D / dalvikvm:VFY:在0x016f處替換操作碼0x20 W / f:禁止違反StrictMode策略:StrictModeDiskReadViolation I / c:從文件加載令牌。 到期時間:354701377毫秒。 I / c:安排下一次嘗試時間為354401秒。 D / AbsListView:獲取MotionRecognitionManager W / f:禁止StrictMode策略違反:StrictModeDiskWriteViolation W / f:禁止StrictMode策略違反:StrictModeDiskWriteViolation W / ContextImpl:無法確保目錄:/storage/extSdCard/Android/data/com.example。 a1105gmdemo / cache W / f:禁止StrictMode策略違反:StrictModeDiskReadViolation W / f:禁止StrictMode策略違反:StrictModeDiskReadViolation W / f:禁止StrictMode策略違反:StrictModeDiskWriteViolation W / f:禁止StrictMode策略違反:StrictMode ! 該應用程序可能在其主線程上做太多工作。 I / dalvikvm:找不到方法android.os.PowerManager.isInteractive,從方法maps.yta引用W / dalvikvm:VFY:無法解析虛擬方法2324:Landroid / os / PowerManager; .isInteractive()ZD / dalvikvm:VFY :將操作碼0x6e替換為0x0047 W / DynamiteModule:找不到com.google.android.gms.google證書的本地模塊描述符類。 I / DynamiteModule:考慮到本地模塊com.google.android.gms.googlecertificates:0和遠程模塊com.google.android.gms.googlecertificates:2 I / DynamiteModule:com.google.android.gms.googlecertificates的選定遠程版本,版本> = 2 E / DynamiteModule:無法加載DynamiteLoader:java.lang.ClassNotFoundException:在路徑:DexPathList [[zip文件“ / data]上找不到類” com.google.android.gms.dynamite.DynamiteModule $ DynamiteLoaderClassLoader“ /app/com.example.jina.a1105gmdemo-144.apk”,zip文件“ /data/data/com.example.jina.a1105gmdemo/code_cache/secondary-dexes/com.example.jina.a1105gmdemo-144.apk”。 classes2.zip“],nativeLibraryDirectories = [/ data / app-lib / com.example.jina.a1105gmdemo-144,/ vendor / lib,/ system / lib]] W / DynamiteModule:無法加載遠程模塊:無法獲取模塊上下文W / DynamiteModule:無法通過快速routeub加載模塊:遠程加載失敗。 找不到本地備用。 W / DynamiteModule:找不到com.google.android.gms.google證書的本地模塊描述符類。 I / DynamiteModule:考慮到本地模塊com.google.android.gms.googlecertificates:0和遠程模塊com.google.android.gms.googlecertificates:2 I / DynamiteModule:com.google.android.gms.googlecertificates的選定遠程版本,版本> = 2

我認為這對您鏈接很有用。 您可以簡單地實現接口Google.InfoWindowAdapter,該接口具有名為getInfoContents(Marker marker)的方法。 在這種方法中,您可以在布局中添加有關所選標記的信息。

我在許多項目中都使用了此功能。

PS對不起,英語不好

  markerOptions.title(Integer.toString(price)); `

編輯此行並將名稱作為參數傳遞,

例如

markerOptions.title( “KFC”);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM