想了解Java-GoogleMapAPIV2调整大小屏幕以匹配绘制的圆的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于googlejavastyle的相关问题,此外,我们还将为您介绍关于An
想了解Java-Google Map API V2调整大小屏幕以匹配绘制的圆的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于google java style的相关问题,此外,我们还将为您介绍关于Android 2.3和Google Maps API v2、Android Google Map API V2(显示地图)、android – Google Maps Api V2围绕当前位置绘制圆圈、android – Google Maps API v2调用点击mylocationbutton的行为的新知识。
本文目录一览:- Java-Google Map API V2调整大小屏幕以匹配绘制的圆(google java style)
- Android 2.3和Google Maps API v2
- Android Google Map API V2(显示地图)
- android – Google Maps Api V2围绕当前位置绘制圆圈
- android – Google Maps API v2调用点击mylocationbutton的行为
Java-Google Map API V2调整大小屏幕以匹配绘制的圆(google java style)
我正在地图上(用户的当前位置)绘制一个圆,并且希望屏幕进行缩放以使圆在全屏中具有一定的边距.我现在正在做什么:
drawCercleAroundPin(_googleMap, DataManager.RADIUS_SEARCH_CERCLE, _location);
moveCamera(_googleMap, (10 / ((DataManager.RADIUS_SEARCH_CERCLE / 900) + 1))+10, 2000, _location, null);
好吧,我尝试了一些愚蠢的演算,因为我找不到合适的解决方案…
有人有主意吗?
解决方法:
如果我理解正确,您是否希望地图适合圆形边界?如果是这样的话
添加一个像this的圆圈
mMap.addCircle(new CircleOptions()
.center(new LatLng(location.getLatitude(), location.getLongitude()))
.radius(100)
.strokeColor(Color.RED)
.fillColor(Color.BLUE));
**那么您需要您的圆的边界框,请阅读this **
LatLngBounds bounds = boundsWithCenterandLatLngdistance(new LatLng(location.getLatitude(), location.getLongitude()),200,200);
**并尝试**
private static final double ASSUMED_INIT_LATLNG_DIFF = 1.0;
private static final float ACCURACY = 0.01f;
public static LatLngBounds boundsWithCenterandLatLngdistance(LatLng center, float latdistanceInMeters, float lngdistanceInMeters) {
latdistanceInMeters /= 2;
lngdistanceInMeters /= 2;
LatLngBounds.Builder builder = LatLngBounds.builder();
float[] distance = new float[1];
{
boolean foundMax = false;
double foundMinLngDiff = 0;
double assumedLngDiff = ASSUMED_INIT_LATLNG_DIFF;
do {
Location.distanceBetween(center.latitude, center.longitude, center.latitude, center.longitude + assumedLngDiff, distance);
float distanceDiff = distance[0] - lngdistanceInMeters;
if (distanceDiff < 0) {
if (!foundMax) {
foundMinLngDiff = assumedLngDiff;
assumedLngDiff *= 2;
} else {
double tmp = assumedLngDiff;
assumedLngDiff += (assumedLngDiff - foundMinLngDiff) / 2;
foundMinLngDiff = tmp;
}
} else {
assumedLngDiff -= (assumedLngDiff - foundMinLngDiff) / 2;
foundMax = true;
}
} while (Math.abs(distance[0] - lngdistanceInMeters) > lngdistanceInMeters * ACCURACY);
LatLng east = new LatLng(center.latitude, center.longitude + assumedLngDiff);
builder.include(east);
LatLng west = new LatLng(center.latitude, center.longitude - assumedLngDiff);
builder.include(west);
}
{
boolean foundMax = false;
double foundMinLatDiff = 0;
double assumedLatDiffnorth = ASSUMED_INIT_LATLNG_DIFF;
do {
Location.distanceBetween(center.latitude, center.longitude, center.latitude + assumedLatDiffnorth, center.longitude, distance);
float distanceDiff = distance[0] - latdistanceInMeters;
if (distanceDiff < 0) {
if (!foundMax) {
foundMinLatDiff = assumedLatDiffnorth;
assumedLatDiffnorth *= 2;
} else {
double tmp = assumedLatDiffnorth;
assumedLatDiffnorth += (assumedLatDiffnorth - foundMinLatDiff) / 2;
foundMinLatDiff = tmp;
}
} else {
assumedLatDiffnorth -= (assumedLatDiffnorth - foundMinLatDiff) / 2;
foundMax = true;
}
} while (Math.abs(distance[0] - latdistanceInMeters) > latdistanceInMeters * ACCURACY);
LatLng north = new LatLng(center.latitude + assumedLatDiffnorth, center.longitude);
builder.include(north);
}
{
boolean foundMax = false;
double foundMinLatDiff = 0;
double assumedLatDiffSouth = ASSUMED_INIT_LATLNG_DIFF;
do {
Location.distanceBetween(center.latitude, center.longitude, center.latitude - assumedLatDiffSouth, center.longitude, distance);
float distanceDiff = distance[0] - latdistanceInMeters;
if (distanceDiff < 0) {
if (!foundMax) {
foundMinLatDiff = assumedLatDiffSouth;
assumedLatDiffSouth *= 2;
} else {
double tmp = assumedLatDiffSouth;
assumedLatDiffSouth += (assumedLatDiffSouth - foundMinLatDiff) / 2;
foundMinLatDiff = tmp;
}
} else {
assumedLatDiffSouth -= (assumedLatDiffSouth - foundMinLatDiff) / 2;
foundMax = true;
}
} while (Math.abs(distance[0] - latdistanceInMeters) > latdistanceInMeters * ACCURACY);
LatLng south = new LatLng(center.latitude - assumedLatDiffSouth, center.longitude);
builder.include(south);
}
return builder.build();
}
终于打电话
CameraUpdateFactory#newLatLngBounds(bounds, padding);
Android 2.3和Google Maps API v2
今天,我尝试使用适用于Android 2.3.3的Google Maps api v2我的步骤:
- 从debug.keystore获得SHA1代码
- 在Google API控制台中创建一个新项目
- 注册一个新的ID
- 启用了Google Maps android api v2
- 使用输入SHA1创建一个Android密钥; it.mappe(it.mappe是我的包)
- 获取API密钥
- 更新AndroidManifest文件:
<permission android:name="it.mappe.permission.MAPS_RECEIVE" android:protectionLevel="signature" />
<uses-permission android:name="it.mappe.permission.MAPS_RECEIVE" />
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-feature android:glEsVersion="0x00020000" android:required="true"` />
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="MY_KEY" />
<activity
android:name="it.mappe.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
- 我的主要活动
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
-
我的activity_main:
<fragment xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent"/>
-
将目录复制
ANDROID_SDK_DIR/extras/google/google_play_services/libproject/google-play-services_lib
到项目的根目录 -
添加
/extras/android/compatibility/v4/android-support-v4.jar
为外部罐 -
将下一行添加到
YOUR_PROJECT/project.properties
android.library.reference.1=google-play-services_lib
当我在三星银河S上运行它(使用Google Play服务apk)时,它崩溃并且logcat显示此错误
E/AndroidRuntime(6435): FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{it.mappe/it.mappe.MainActivity}:
android.view.InflateException: Binary XML file line #2: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581)
at android.view.LayoutInflater.inflate(LayoutInflater.java:386)
at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:209)
at android.app.Activity.setContentView(Activity.java:1657)
at it.mappe.MainActivity.onCreate(MainActivity.java:12)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
... 11 more
Caused by: java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader[/data/app/it.mappe-2.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at android.view.LayoutInflater.createView(LayoutInflater.java:471)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:549)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
... 19 more
一些建议?
编辑
这是我的main.xml:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Android Google Map API V2(显示地图)
检查Android SDK ,确保Google Play service已经安装,现象见图:
开发的应用要支持2.2+导入Froyo的工程,支持3.1+的,使用第二个。Google Map Lib 的工程位于 ~/android Sdk/extras/google/,选择合适的工程导入eclipse。
创建自己的工程,然后将上面的工程作为库,引进来
AndroidManifest.xml的配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sample.app"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<!-- permission -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<!-- OpenGL ES 2 -->
<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="com.sample.app.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Google Map V2 key -->
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="API_KEY"/>
</application>
</manifest>
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>
Activity
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
执行结果:
android – Google Maps Api V2围绕当前位置绘制圆圈
我正在努力获得表示用户当前位置的小标记,以便我可以围绕它绘制一个圆圈.
到目前为止这是我的代码.
//Set up map and display users current position. MapFragment mapFragment = (MapFragment) getFragmentManager() .findFragmentById(R.id.nearbyMapSearch); mapFragment.getMapAsync(this); final GoogleMap map = (((MapFragment) getFragmentManager().findFragmentById(R.id.nearbyMapSearch)).getMap()); map.setMyLocationEnabled(true); //zoom to users location GeoLocationHandler geoHandler = new GeoLocationHandler(getActivity().getApplicationContext()); Log.i("Search Fragment","" + geoHandler.getCurrentLatitude() + "," + geoHandler.getCurrentLongitude()); LatLng loc = new LatLng(geoHandler.getCurrentLatitude(),geoHandler.getCurrentLongitude()); //Begin animating camera. map.animateCamera(CameraUpdateFactory.newLatLngZoom( new LatLng(loc.latitude,loc.longitude),13)); //Instantiate new Camera position CameraPosition cameraPosition = new CameraPosition.Builder() .target(new LatLng(loc.latitude,loc.longitude)) .zoom(3) .bearing(0) .tilt(0) .build(); map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
任何帮助都将非常感谢谢谢.
解决方法
Circle circle = map.addCircle(new CircleOptions() .center(new LatLng(loc.latitude,loc.longitude)) .radius(1000) .strokeColor(Color.RED) .fillColor(Color.BLUE));
更多信息https://developers.google.com/android/reference/com/google/android/gms/maps/model/Circle
您应该订阅用户位置的更新并重置圆心
circle.setCenter(newLocation);
android – Google Maps API v2调用点击mylocationbutton的行为
mMap.setMyLocationEnabled(true);
我想要实现的是实际点击按钮的功能,该按钮现在出现在GoogleMap上(即,使用正确的缩放等将地图设置为用户位置的动画).
功能已经在GoogleMap对象中,我该如何使用它?
我不想使用LocationListener等来实现这一点,我只想“调用相同的代码”,当我点击地图上的按钮时,它会被调用.可以这么简单吗?
提前致谢.
编辑:
我基本上想要做的是将地图置于用户位置,这与我单击按钮时GoogleMap在用户位置中心的方式完全相同.像这样:
GoogleMap mMap = this.getMap(); if(mMap != null) { mMap.setMyLocationEnabled(true); //Todo center the map on mylocation }
编辑:
显然谷歌正在努力解决这个问题. http://code.google.com/p/gmaps-api-issues/issues/detail?id=4644
解决方法
例如,当您缩小显示时,单击该按钮会在放大时将您设置为您的位置动画,而如果您已经处于某些缩放级别,则单击该按钮只会在保持当前状态的同时将您设置为您的位置.缩放级别.
如果我们只是简单地获得对MyLocationButton的引用并且只是,你知道,点击它就不是那么费力地试图复制这种行为,而不是很难.嗯,这是我发现当前最好的方法:
@OnClick(R.id.fabMyLocation) public void onMyLocationClick(FloatingActionButton fabMyLocation) { View myLocationButton = ((View) mapFragment.getView().findViewById(Integer.parseInt("1")).getParent()) .findViewById(Integer.parseInt("2")); myLocationButton.performClick(); }
是的,它并不漂亮,并且依赖于可能在未来版本的Google Maps API中更改的硬编码ID.但是这种检索按钮的方法基于this highly rated answer from 2013,到目前为止,从Google Play Services 8.4.0开始,仍然可以正常运行.
关于Java-Google Map API V2调整大小屏幕以匹配绘制的圆和google java style的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android 2.3和Google Maps API v2、Android Google Map API V2(显示地图)、android – Google Maps Api V2围绕当前位置绘制圆圈、android – Google Maps API v2调用点击mylocationbutton的行为的相关信息,请在本站寻找。
本文标签: