我正在开发一个跟踪应用程序,因此我使用GPS数据在画布中绘制路线+检查点.问题是,我在SurfaceView中开发了zoom/drag + span以及所有"lat-long to cartesian conversion",但是如果我可以使用maps api功能(我自己的话)就可以轻松完成所有这些工作.覆盖).
所以我的问题是,我可以使用没有互联网连接的地图api/MapFragment并利用api功能吗?你们有没有做过这样的事情?
我正在使用SupportMapFragment并取得圆满成功.我根本没有任何问题.
但是我在应用程序运行时遇到错误.我正在运行Gingerbread手机,它有最新的GooglePlay.另请注意,我正在使用SupportMapFragment和其他支持类,以迎合预蜂窝.
Could not find class 'maps.j.k', referenced from method maps.y.ae.a`
Run Code Online (Sandbox Code Playgroud)
一旦我膨胀我的视图就会发生错误.
inflater.inflate(R.layout.fragment_map, container, false);
Run Code Online (Sandbox Code Playgroud)
我的布局文件(fragment_map.xml):
<fragment
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪(出错时):
Thread [<1> main] (Suspended)
<VM does not provide monitor information>
PhoneLayoutInflater(LayoutInflater).inflate(int, ViewGroup, boolean) line: 322
MapsFragment.onCreateView(LayoutInflater, ViewGroup, Bundle) line: 90
MapsFragment(Fragment).performCreateView(LayoutInflater, ViewGroup, Bundle) line: 1460
FragmentManagerImpl.moveToState(Fragment, int, int, int, boolean) line: 911
FragmentManagerImpl.moveToState(int, int, int, boolean) line: 1088
BackStackRecord.run() line: 682
FragmentManagerImpl.execPendingActions() line: 1444
FragmentManagerImpl$1.run() line: 429
FragmentActivity$1(Handler).handleCallback(Message) line: 587
FragmentActivity$1(Handler).dispatchMessage(Message) line: 92
Looper.loop() …Run Code Online (Sandbox Code Playgroud) android android-fragments mapfragment supportmapfragment android-maps-v2
我目前正在尝试将Map View(或包含地图的片段)放入CollapsingToolbarLayout。我希望在RecyclerView滚动时对其具有视差效果。不幸的是,它根本没有出现!甚至没有灰色网格!折叠动画正在运行。我到处都在搜索,但是我所能找到的只是关于ImageView,没有其他组件。所以这是我的问题:
ImageView在CollapsingToolbarLayout?(文档讨论的是子视图,因此我认为这是可能的)这是我的xml:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:map="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="300dp">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar
android:id="@+id/main_activity_toolbar"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"
android:background="?attr/colorPrimary"
android:layout_alignParentTop="true"
app:layout_collapseMode="pin"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
</android.support.v7.widget.Toolbar>
<com.google.android.gms.maps.MapView
android:id="@+id/main_activity_mapview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:apiKey="AIzaSyA-kEuKT39QK8eG7iYWriFgsvkrZZz6zNo"
android:clickable="true"
app:layout_collapseMode="parallax" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/main_rv_list_places"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
还有我拿回地图的部分。
onMapReady永远不会触发。
if (mMap == null) {
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.getMapAsync(new OnMapReadyCallback() {
@Override …Run Code Online (Sandbox Code Playgroud) android android-mapview mapfragment android-collapsingtoolbarlayout
安装后启动应用程序只会在Samsung手机上导致崩溃。在其他手机上不会发生。错误是
java.lang.OutOfMemoryError:确保本地容量:
仅在安装后首次启动应用程序时才发生崩溃。重新启动该应用程序时,它会运行,但会导致内存不断增加并且永远不会清除。
这是代码:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view= inflater.inflate(R.layout.fragment_place_search_results, container, false)
mapView = childFragmentManager.findFragmentById(R.id.placesearchresults_map) as SupportMapFragment
mapView.onCreate(savedInstanceState)
mapView.getMapAsync(this)
retainInstance = true
return view
}
override fun onResume() {
super.onResume()
mapView.onResume()
}
override fun onPause() {
super.onPause()
mapView.onPause()
}
override fun onStart() {
super.onStart()
mapView.onStart()
}
override fun onDestroy() {
super.onDestroy()
map?.clear()
mapView.onDestroy()
mapMarkerFactor.recycle()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
mapView.onSaveInstanceState(outState)
}
override fun onLowMemory() {
super.onLowMemory()
mapView.onLowMemory()
}
Run Code Online (Sandbox Code Playgroud)
XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" …Run Code Online (Sandbox Code Playgroud) android google-maps memory-leaks android-mapview mapfragment
SupportMapFragment和MapFragment之间有什么区别吗?在参考文献中,它表示您应该只在使用Android API级别12及更高级别时使用MapFragment,但是还有其他差异吗?其中一个更快吗?
performance android mapfragment supportmapfragment difference
我有一个列表视图.我想在每个列表项中添加一个地图.单击列表项时,地图将显示/隐藏.当地图显示时,我可以缩放,查看位置详细信息...... 但是我无法在适配器中设置MapFragment.所以,给我一些解决方案.谢谢.
gMap = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
googleMap = gMap.getMap();
Run Code Online (Sandbox Code Playgroud)
我不能在getView中这样做.
我在Google Map Fragments中面临一些问题"getmap()中的空指针Expcepttion".我想在片段中插入mapfragment请查看代码并告诉我是否正在使用正确的appraoch ..并让我知道我需要对我的代码做些什么来使其工作
我的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/bg2"
android:weightSum="100">
<Button
android:id="@+id/perx_button"
android:layout_marginTop="70dip"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/perx_card_btn" />
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />
</LinearLayout>
public class PerxDetailedFragment extends SupportMapFragment {
static final LatLng HAMBURG = new LatLng(53.558, 9.927);
static final LatLng KIEL = new LatLng(53.551, 9.993);
GoogleMap map;
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
SupportMapFragment fmap = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);
if (fmap == null) …Run Code Online (Sandbox Code Playgroud) 使用下面的代码show和hide MapFragment,它运作良好:
public class MapFragmentActivity extends FragmentActivity {
...........
mMapFragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map));
googleMap = mMapFragment.getMap();
googleMap.setMyLocationEnabled(true);
.....
if(isChecked)
{
mMapFragment.getView().setVisibility(View.VISIBLE);
}
else
{
mMapFragment.getView().setVisibility(View.GONE);
}
Run Code Online (Sandbox Code Playgroud)
但每当我使用它时Animation,Map永远不会隐藏,它始终是visible,而动画对我有用;
if(isChecked)
{
mMapFragment.getView().setVisibility(View.VISIBLE);
mMapFragment.getView().startAnimation(AnimationUtils.loadAnimation(MapFragmentActivity.this,
R.anim.slide_up));
}
else
{
mMapFragment.getView().setVisibility(View.GONE);
mMapFragment.getView().startAnimation(AnimationUtils.loadAnimation(MapFragmentActivity.this,
R.anim.slide_down));
}
Run Code Online (Sandbox Code Playgroud) android android-fragmentactivity mapfragment google-maps-android-api-2
我的应用程序中有一个 MapFragment 和常规 Fragment。问题是当我在片段之间切换时,MapFragment 在后台。我有代码来查找 MapFragment 是否存在,但我需要代码来删除它。
代码:
FragmentMapView mapFragmentcheck = (FragmentMapView)getFragmentManager().findFragmentByTag("map");
if (mapFragmentcheck != null) {
Log.d("tag","max exists");
if (mapFragmentcheck.isVisible()) {
Log.d("tag","map is visble, remove it");
// Do remove here, but how?
}
}
else {
Log.d("tag","map does not exists");
}
Run Code Online (Sandbox Code Playgroud) 我需要在活动中显示两个具有两个不同位置的 MapFragment。在我的 XML 文件中,我有两个名为“map”和“map_two”的 MapFragment,在 Java 中,我在 onCreate 中的代码是:
com.google.android.gms.maps.MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(map);
mapCount = 1;
mapFragment.getMapAsync(this);
com.google.android.gms.maps.MapFragment mapFragmentTwo = (MapFragment) getFragmentManager().findFragmentById(map_two);
mapCount = 2;
mapFragmentTwo.getMapAsync(this);
Run Code Online (Sandbox Code Playgroud)
然后我覆盖 onMapReady :
@Override
public void onMapReady(GoogleMap googleMap) {
if (mapCount == 1){
mMap = googleMap;
LatLng vannes = new LatLng(47.66, -2.75);
mMap.addMarker(new MarkerOptions().position(vannes).title("Vannes"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(vannes));
} else if (mapCount == 2){
mMap = googleMap;
LatLng bordeaux = new LatLng(44.833328, -0.56667);
mMap.addMarker(new MarkerOptions().position(bordeaux).title("Bordeaux"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(bordeaux));
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是两张地图显示相同的位置,而我想显示两个不同的位置。你知道怎么做吗?
谢谢,
亚历克斯
mapfragment ×10
android ×9
google-maps ×2
android-collapsingtoolbarlayout ×1
difference ×1
mapactivity ×1
memory-leaks ×1
performance ×1