Xamarin.Forms
Gesty
Szukaj…
Ustaw obraz jako dostępny do dodania, dodając TapGestureRecognizer
W TapGestureRecognizer
dostępnych jest kilka domyślnych programów rozpoznających, jednym z nich jest TapGestureRecognizer
.
Możesz dodać je do praktycznie dowolnego elementu wizualnego. Spójrz na prostą implementację, która wiąże się z Image
. Oto jak to zrobić w kodzie.
var tappedCommand = new Command(() =>
{
//handle the tap
});
var tapGestureRecognizer = new TapGestureRecognizer { Command = tappedCommand };
image.GestureRecognizers.Add(tapGestureRecognizer);
Lub w XAML:
<Image Source="tapped.jpg">
<Image.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding TappedCommand}"
NumberOfTapsRequired="2" />
</Image.GestureRecognizers>
</Image>
Tutaj polecenie ustawia się za pomocą powiązania danych. Jak widać, można również ustawić NumberOfTapsRequired
aby włączyć więcej stuknięć przed podjęciem działania. Wartość domyślna to 1 dotknięcie.
Inne gesty to uszczypnięcie i przesuwanie.
Powiększ obraz gestem uszczypnięcia
Aby Image
(lub inny element wizualny) można było PinchGestureRecognizer
musimy dodać do niego PinchGestureRecognizer
. Oto jak to zrobić w kodzie:
var pinchGesture = new PinchGestureRecognizer();
pinchGesture.PinchUpdated += (s, e) => {
// Handle the pinch
};
image.GestureRecognizers.Add(pinchGesture);
Ale można to również zrobić z XAML:
<Image Source="waterfront.jpg">
<Image.GestureRecognizers>
<PinchGestureRecognizer PinchUpdated="OnPinchUpdated" />
</Image.GestureRecognizers>
</Image>
W dołączonej obsłudze zdarzeń należy podać kod, aby powiększyć obraz. Oczywiście można również zastosować inne zastosowania.
void OnPinchUpdated (object sender, PinchGestureUpdatedEventArgs e)
{
// ... code here
}
Inne gesty to dotknij i przesuń.
Pokaż całą powiększoną zawartość obrazu za pomocą PanGestureRecognizer
Gdy masz powiększony Image
(lub inną zawartość), możesz przeciągnąć go wokół Image
aby wyświetlić całą jego zawartość w powiększonym stanie.
Można to osiągnąć poprzez wdrożenie PanGestureRecognizer. Z kodu wygląda to tak:
var panGesture = new PanGestureRecognizer();
panGesture.PanUpdated += (s, e) => {
// Handle the pan
};
image.GestureRecognizers.Add(panGesture);
Można to również zrobić z XAML:
<Image Source="MonoMonkey.jpg">
<Image.GestureRecognizers>
<PanGestureRecognizer PanUpdated="OnPanUpdated" />
</Image.GestureRecognizers>
</Image>
W zdarzeniu związanym z kodem możesz teraz odpowiednio obsługiwać panoramowanie. Użyj tej metody podpisu do obsługi:
void OnPanUpdated (object sender, PanUpdatedEventArgs e)
{
// Handle the pan
}
Umieść pinezkę w miejscu, w którym użytkownik dotknął ekranu za pomocą MR.Gestures
Wbudowane rozpoznawanie gestów Xamarins zapewnia tylko bardzo podstawową obsługę dotykową. Np. Nie ma możliwości uzyskania pozycji dotykającego palca. MR.Gestures to komponent, który dodaje 14 różnych zdarzeń obsługi dotykowej. Pozycja dotykających palców jest częścią EventArgs
przekazywanych do wszystkich zdarzeń MR.Gestures.
Jeśli chcesz umieścić pinezkę w dowolnym miejscu na ekranie, najprostszym sposobem jest użycie MR.Gestures.AbsoluteLayout
który obsługuje zdarzenie Tapping
.
<mr:AbsoluteLayout x:Name="MainLayout" Tapping="OnTapping">
...
</mr:AbsoluteLayout>
Jak widać, Tapping="OnTapping"
wydaje się bardziej przypominać .NET niż składnia Xamarins z zagnieżdżonymi GestureRecognizers
. Ta składnia została skopiowana z iOS i trochę pachnie dla programistów .NET.
W swoim kodzie możesz dodać OnTapping
obsługi OnTapping
następujący sposób:
private void OnTapping(object sender, MR.Gestures.TapEventArgs e)
{
if (e.Touches?.Length > 0)
{
Point touch = e.Touches[0];
var image = new Image() { Source = "pin" };
MainLayout.Children.Add(image, touch);
}
}
Zamiast zdarzenia Tapping
można również użyć TappingCommand
i powiązać z ViewModel, ale skomplikowałoby to wszystko w tym prostym przykładzie.
Więcej próbek do MR.Gestures można znaleźć w aplikacji GestureSample w GitHub i na stronie MR.Gestures . Pokazują one również, jak używać wszystkich innych zdarzeń dotykowych za pomocą programów obsługi zdarzeń, poleceń, MVVM, ...