Dans une page, j'ai un ScrollView
et à l'intérieur des étiquettes et un Google Maps
au milieu. Dans Android, lorsque j'essaie de déplacer la carte vers le haut ou vers le bas, toutes les pages sont déplacées à l'exception de la carte. Pour afficher la carte, j'utilise Xamarin.Forms.GoogleMaps. J'ai créé mon propre custommap
pour dessiner un itinéraire. Le composant fonctionne bien, je peux voir la carte en iOS
et Android
et je peux déplacer la carte.Xamarin, Android et Google Maps: Je ne peux pas déplacer la carte de haut en bas (uniquement à gauche et à droite)
J'ai lu quelques messages sur Stackoverflow et this post mais toujours les gars sont une activité et le projet est natif.
J'ai créé:
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.
}
}
}
Il y a quelques erreurs:
- Comment puis-je résoudre le problème pour Android pour déplacer la carte correctement?
- SetContentView (Resource.Layout.rtc); qu'est-ce que rtc?
- Resource.Id.map n'existe pas
Dans mon cas, j'ai une solution PCL avec des projets iOS et Android. Dans iOS, tout va bien. Le seul problème est pour Android. Comment puis-je résoudre ce problème?
Un conseil? Merci.
il est difficile de dire ce qui est « pac », mais Resource.Layout.xxxx essentiellement le xxxx » est le nom du fichier de mise en page, par exemple xxxx.xml et tout composant à l'intérieur layout.xml peut avoir un attribut "id" par exemple si nous avons un alors l'identifiant du bouton est "quelque chose "et nous pouvons obtenir cette vue du code derrière en appelant Button btn = (Button) Resource.id.something; –
Merci @GaneshCauda J'ai compris cela.Ma question est liée au code que j'ai trouvé.Je ne peux pas comprendre comment je peux utilisez-le dans 'Xamarin.Form s' – Enrico
en regardant votre code, la meilleure possibilité est peut-être de changer le "rtc" avec "vue" ou vice versa ("view.axml" avec "rtc.axml" –