在頁面我有一個ScrollView
,裏面有一些標籤,中間有一個Google Maps
。在Android中,當我嘗試向上或向下移動地圖時,所有頁面都會移動,但地圖會移動。要顯示我正在使用的地圖Xamarin.Forms.GoogleMaps。我創建了自己的custommap
來繪製路線。該組件運行良好,我可以看到地圖iOS
和Android
,我可以移動地圖。Xamarin,Android和谷歌地圖:我無法上下移動地圖(只有左右)
我看了一些帖子Stackoverflow和this post,但總是人是一個活動,該項目是本地。
我創建:
TouchableMapFragment
public class TouchableMapFragment : MapFragment
{
public event EventHandler TouchDown;
public event EventHandler TouchUp;
public override View OnCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState)
{
var root = base.OnCreateView(inflater, container, savedInstanceState);
var wrapper = new TouchableWrapper(Activity);
wrapper.SetBackgroundColor(Resources.GetColor(Android.Resource.Color.Transparent));
((ViewGroup) root).AddView(wrapper,
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent,
ViewGroup.LayoutParams.MatchParent));
wrapper.TouchUp =() =>
{
if (TouchUp != null)
TouchUp(this, EventArgs.Empty);
};
wrapper.TouchDown =() =>
{
if (TouchDown != null)
TouchDown(this, EventArgs.Empty);
};
return root;
}
class TouchableWrapper : FrameLayout
{
public Action TouchDown;
public Action TouchUp;
#region ctors
protected TouchableWrapper(IntPtr javaReference, JniHandleOwnership transfer)
: base(javaReference, transfer) {}
public TouchableWrapper(Context context)
: this(context, null) {}
public TouchableWrapper(Context context, IAttributeSet attrs)
: this(context, attrs, 0) {}
public TouchableWrapper(Context context, IAttributeSet attrs, int defStyle)
: base(context, attrs, defStyle) { }
#endregion
public override bool DispatchTouchEvent(MotionEvent e)
{
switch (e.Action)
{
case MotionEventActions.Down:
if (TouchDown != null)
TouchDown();
break;
case MotionEventActions.Cancel:
case MotionEventActions.Up:
if (TouchUp != null)
TouchUp();
break;
}
return base.DispatchTouchEvent(e);
}
}
}
view.xaml
<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scroll">
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent">
<fragment
android:id="@+id/map"
android:layout_width="600dp"
android:layout_height="match_parent"
android:name="my.awesome.namespace.TouchableMapFragment" />
</LinearLayout>
</HorizontalScrollView>
Activity.cs
public class MyActivity : Activity
{
private GoogleMap _map;
private HorizontalScrollView _hsv;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.rtc);
_hsv = FindViewById<HorizontalScrollView>(Resource.Id.scroll);
SetupMapIfNeeded();
}
private void SetupMapIfNeeded()
{
if (null != _map) return;
var frag = FragmentManager.FindFragmentById<TouchableMapFragment>(Resource.Id.map);
if (frag != null)
{
frag.TouchUp += (sender, args) => _hsv.RequestDisallowInterceptTouchEvent(false);
frag.TouchDown += (sender, args) => _hsv.RequestDisallowInterceptTouchEvent(true);
_map = frag.Map;
if (_map == null) return; // will probably not happen
// do stuff to _map here, such as adding overlays etc.
}
}
}
有幾個誤區:
- 如何解決Android的問題妥善移動地圖?
- SetContentView(Resource.Layout.rtc);什麼是rtc?
- Resource.Id.map不存在
在我的情況,我有iOS和Android項目PCL解決方案。在iOS中一切都很好。唯一的問題是Android。我該如何解決這個問題?
有什麼建議嗎?謝謝。
這是很難說什麼是「RTC」,但基本上Resource.Layout.xxxx的 xxxx」是的名稱佈局文件,例如xxxx.xml ,layout.xml中的任何組件都可以具有「id」屬性,例如,如果我們有一個那麼按鈕的id是「something 「我們可以通過調用Button btn =(Button)Resource.id.something; –
來從代碼背後獲得這個視圖,謝謝@GaneshCauda我明白了,我的問題與我找到的代碼有關,我無法理解我可以如何在Xamarin.Form中使用它s' – Enrico
看你的代碼,最好的可能是用「view」或者反過來改變「rtc」(「view.axml」用「rtc.axml」 –