当用户尝试用手指拖动地图而不打扰放大和缩小时,我可以禁用拖动功能吗?
任何人请建议这样做的想法!感谢您的宝贵帮助!!
我正在尝试实施新的Android Google Maps API(v2).然而,它与SlidingMenu似乎并不顺利.如您所知,MapFragment实施基于SurfaceView.问题是SurfaceView它不喜欢移动它 - 我的意思是把它放在可移动的视图中:
ViewPager, ScrollView, ListView,SlidingMenu.移动它时,它会在其像素最初放置的位置留下黑洞.它看起来像这样.
通过在其上指定透明背景SurfaceView或者甚至在其上放置透明可以部分地解决该问题View.我只是无法想象,如果只是对我来说结果是不可接受的,或者我有一个不同的问题,使它看起来如何.
要查看它的外观,请观看此视频.
(对不起质量,但无论如何都可以轻松看到问题)
当打开时拉开正常的列表视图(橙色屏幕)时SlidingMenu,动画很流畅.但是一MapFragment出现,地图上就会出现一些奇怪的刷新/闪烁/同步问题.
在HTC One S和三星Galaxy ACE上测试过.
我解决它的超级疯狂的想法:每次开始动画开始时,截取
拍摄地图的截图是不可能的,但也许有人会从中受到启发.MapFragment(应该可以使用SurfaceView)并在动画期间将其放置.但我真的不知道该怎么做......
或者也许禁用以其他方式重绘地图,我不知道.
更新:
发现了这个.
看起来SurfaceView可以更改为TextureView以消除这些限制.但由于MapFragment基于SurfaceView,我不知道它是否可以实现.
另一个更新 似乎此问题已在4.1+设备上得到解决.他们只使用了TextureView.但在较低版本中,我们仍然需要使用变通方法.
android surfaceview android-maps mapfragment android-maps-v2
我不确定我是应该使用MapView还是坚持使用MapFragment.我的应用程序是一个应用程序,可以找到离您最近的最近的一组位置.我希望能够在按下标记时添加位置,显示标记的详细信息,以及当用户沿着地图移动时我希望能够获取地图中心的坐标并显示定义中的最近位置半径.如果我继续使用,MapFragments或者MapView在我还有机会的时候切换到,我会处于不利地位吗?
android google-maps android-mapview mapfragment google-maps-android-api-2
我使用适用于Android的Google Maps Api Version 2将MapFragment添加到我的应用程序中.
这个片段在速度和API可用性方面有很大改进.可悲的是,它还允许用双指手势旋转地图.我想禁用旋转,因为通常会识别这两个手指手势而不是缩放手势.
如何禁用地图旋转?
我需要你的帮助......我一直工作到3天.我的应用正在使用片段.其中一个片段必须显示Android版Google Maps V2 api中的地图.
目前,我正在使用MapFragment,但毫不奇怪,片段中的片段不是一个好主意,但它有效,地图正在显示,我可以编辑它但是当我切换主片段并返回它时.
引起:java.lang.IllegalArgumentException:二进制XML文件行#59:复制id 0x7f070041,标记为null或父ID为0x7f070040,另一个片段为com.google.android.gms.maps.MapFragment
在android.app.Activity.onCreateView(Activity.java:4252)
在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:673)
当我继续另一个片段并返回到包含地图的片段时,这就是原因.我正在寻找3天来解决这个问题,但没有很好的结果.
为了继续,我有一个Activity调用一个片段,该片段在布局文件中包含一个MapFragment.如果您需要更多,请问:)
谢谢
编辑:这是在主Activity中更改Fragment的代码
private void swtichFragment(Fragment fragment, Bundle bundle)
{
fragment.setBundle(this, bundle);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.rightFragmentPlaceHolder, fragment);
fragmentTransaction.commit();
mRightFragment = fragment;
}
Run Code Online (Sandbox Code Playgroud) 我搜索了如何在点击地图时获取位置的坐标.但是,大多数(如果不是全部)示例都需要MapView作为参数.例如:
public boolean onTap(GeoPoint p, MapView map){
if ( isPinch ){
return false;
}else{
Log.i(TAG,"TAP!");
if ( p!=null ){
handleGeoPoint(p);
return true; // We handled the tap
}else{
return false; // Null GeoPoint
}
}
}
@Override
public boolean onTouchEvent(MotionEvent e, MapView mapView)
{
int fingers = e.getPointerCount();
if( e.getAction()==MotionEvent.ACTION_DOWN ){
isPinch=false; // Touch DOWN, don't know if it's a pinch yet
}
if( e.getAction()==MotionEvent.ACTION_MOVE && fingers==2 ){
isPinch=true; // Two fingers, def a pinch
}
return super.onTouchEvent(e,mapView); …Run Code Online (Sandbox Code Playgroud) android location touch-event mapfragment google-maps-android-api-2
我有问题访问地图的片段.getFragmentManager().findFragmentById(R.id.map))返回null.我不知道为什么.有什么问题?
谢谢!
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tvNombreCentro"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="tag_fragment_map" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
并且在setContentView之后的活动中我尝试访问地图,但是我收到了一个异常
public class Mapa extends Activity {
private GoogleMap mMap;
private ActionBar ab;
private TextView tvNombreCentro;
private TextView tvTelefonoValor;
private TextView tvEMailValor;
private TextView tvWebValor;
private TextView tvDireccionValor;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mapa_centro);
GoogleMap mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
.getMap();
}
Run Code Online (Sandbox Code Playgroud) 据我所知MapFragment,转换动画存在问题.布局上的所有视图都会立即显示,包括MapFragment自己的视图(如缩放按钮).但是只有在动画完成后,地图本身才会加载延迟.
为了说明问题,我做了以下事情:
观看此视频:http://www.youtube.com/watch?v = 12SEotktlXI
你有什么建议可以防止这种滞后吗?为什么所有视图都会立即加载,但地图本身却没有?
测试环境:Nexus 5,Android 4.4.2,无根
编辑:使用MapView而不是MapFragment时也会出现此问题.
android google-maps android-fragments mapfragment google-maps-android-api-2
我知道差异,因为我正在开发一个应用程序,我将介绍谷歌地图API v2用于编译Android 2.3以上.我应该使用哪个?
我正在使用Xamarin(版本7.1)开发Android应用程序.它显示为地图并绘制PolyLines,这样做OnCameraIdle().
以MapFragment编程方式生成OnCreate.我正在获取GoogleMapin OnResumevia GetMapAsync并绑定侦听器OnMapReady.
它们工作正常,但仅限于开始.一旦设备旋转(纵向 - >横向或反之亦然),相机移动不会再触发听众.
然而,地图有效 - 我(用户)仍然可以很好地移动相机.我(应用程序)再也无法使用它了.
这是裸代码,只有地图创建和处理.其他所有(实际绘图)都被删除:
public class MapActivity : Activity, IOnMapReadyCallback,
GoogleMap.IOnCameraIdleListener, GoogleMap.IOnCameraMoveStartedListener
{
private GoogleMap _map;
private MapFragment _mapFragment;
private void InitializeMap()
{
_mapFragment = MapFragment.NewInstance();
var tx = FragmentManager.BeginTransaction();
tx.Add(Resource.Id.map_placeholder, _mapFragment);
tx.Commit();
}
private void SetMapListeners()
{
Log.Debug("MyApp/ Map", "SetMapListeners");
_map.SetOnCameraIdleListener(this);
_map.SetOnCameraMoveStartedListener(this);
}
/* Activity */
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Log.Debug("MyApp / Map", "OnCreate");
SetContentView(Resource.Layout.Map);
InitializeMap();
} …Run Code Online (Sandbox Code Playgroud) android ×10
mapfragment ×10
google-maps ×5
fragment ×2
android-maps ×1
c# ×1
drag ×1
location ×1
surfaceview ×1
touch-event ×1
xamarin ×1