GambarTampilan
menyediakan DrawingView
permukaan yang memungkinkan gambar garis melalui penggunaan interaksi sentuhan atau mouse. Hasil gambar pengguna dapat disimpan sebagai gambar.
Kasus penggunaan umum untuk ini adalah menyediakan kotak tanda tangan dalam aplikasi.
Penggunaan dasar
DrawingView
memungkinkan untuk mengatur warna garis, lebar garis, dan mengikat ke kumpulan garis.
XAML
Menyertakan namespace XAML
Untuk menggunakan toolkit di XAML, hal berikut xmlns
perlu ditambahkan ke halaman atau tampilan Anda:
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
Oleh karena itu hal-hal berikut:
<ContentPage
x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
</ContentPage>
Akan dimodifikasi untuk menyertakan xmlns
sebagai berikut:
<ContentPage
x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
</ContentPage>
Menggunakan DrawingView
<toolkit:DrawingView
Lines="{Binding MyLines}"
LineColor="Red"
LineWidth="5" />
C#
using CommunityToolkit.Maui.Views;
var drawingView = new DrawingView
{
Lines = new ObservableCollection<IDrawingLine>(),
LineColor = Colors.Red,
LineWidth = 5
};
Cuplikan layar berikut menunjukkan DrawingView yang dihasilkan di Android:
Penggunaan MultiBaris
Secara default DrawingView
hanya mendukung 1 baris. Untuk mengaktifkan MultiLine
atur IsMultiLineModeEnabled
ke true. Pastikan ShouldClearOnFinish
salah.
XAML
<views:DrawingView
Lines="{Binding MyLines}"
IsMultiLineModeEnabled="true"
ShouldClearOnFinish="false" />
C#
using CommunityToolkit.Maui.Views;
var gestureImage = new Image();
var drawingView = new DrawingView
{
Lines = new ObservableCollection<IDrawingLine>(),
IsMultiLineModeEnabled = true,
ShouldClearOnFinish = false,
};
Cuplikan layar berikut menunjukkan DrawingView yang dihasilkan di Android:
Menangani peristiwa saat Garis Gambar Selesai
DrawingView
memungkinkan untuk berlangganan peristiwa seperti OnDrawingLineCompleted
. Perintah DrawingLineCompletedCommand
yang sesuai juga tersedia.
XAML
<views:DrawingView
Lines="{Binding MyLines}"
DrawingLineCompletedCommand="{Binding DrawingLineCompletedCommand}"
OnDrawingLineCompleted="OnDrawingLineCompletedEvent" />
C#
using CommunityToolkit.Maui.Views;
var gestureImage = new Image();
var drawingView = new DrawingView
{
Lines = new ObservableCollection<IDrawingLine>(),
DrawingLineCompletedCommand = new Command<IDrawingLine>(async (line) =>
{
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
var stream = await line.GetImageStream(gestureImage.Width, gestureImage.Height, Colors.Gray.AsPaint(), cts.Token);
gestureImage.Source = ImageSource.FromStream(() => stream);
})
};
drawingView.OnDrawingLineCompleted += async (s, e) =>
{
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
var stream = await e.LastDrawingLine.GetImageStream(gestureImage.Width, gestureImage.Height, Colors.Gray.AsPaint(), cts.Token);
gestureImage.Source = ImageSource.FromStream(() => stream);
};
Gunakan dalam ScrollView
Saat menggunakan bagian DrawingView
dalam ScrollView
interaksi sentuh dengan ScrollView
terkadang dapat dicegat di iOS. Ini dapat dicegah dengan mengatur properti ke ShouldDelayContentTouches
false
di iOS sesuai contoh berikut:
Saya memecahkan masalah ini, dengan menambahkan ios:ScrollView.ShouldDelayContentTouches="false" ke ScrollView yang berisi DrawingView:
<ContentPage
xmlns:ios="clr-namespace:Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;assembly=Microsoft.Maui.Controls">
<ScrollView ios:ScrollView.ShouldDelayContentTouches="false">
<DrawingView />
</ScrollView>
</ContentPage>
Untuk informasi lebih lanjut, silakan merujuk ke sentuhan konten ScrollView.
Penggunaan tingkat lanjut
Untuk mendapatkan manfaat penuh, DrawingView
menyediakan metode untuk mendapatkan aliran gambar dari garis gambar.
XAML
<toolkit:DrawingView
x:Name="DrawingViewControl"
Lines="{Binding MyLines}"
IsMultiLineModeEnabled="true"
ShouldClearOnFinish="true"
DrawingLineCompletedCommand="{Binding DrawingLineCompletedCommand}"
OnDrawingLineCompleted="OnDrawingLineCompletedEvent"
LineColor="Red"
LineWidth="5"
HorizontalOptions="Fill"
VerticalOptions="Fill">
<toolkit:DrawingView.Background>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1">
<GradientStop Color="Blue"
Offset="0"/>
<GradientStop Color="Yellow"
Offset="1"/>
</LinearGradientBrush>
</toolkit:DrawingView.Background>
</toolkit:DrawingView>
C#
using CommunityToolkit.Maui.Views;
var gestureImage = new Image();
var drawingView = new DrawingView
{
Lines = new ObservableCollection<IDrawingLine>(),
IsMultiLineModeEnabled = true,
ShouldClearOnFinish = false,
DrawingLineCompletedCommand = new Command<IDrawingLine>(async (line) =>
{
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
var stream = await line.GetImageStream(gestureImage.Width, gestureImage.Height, Colors.Gray.AsPaint(), cts.Token);
gestureImage.Source = ImageSource.FromStream(() => stream);
}),
LineColor = Colors.Red,
LineWidth = 5,
Background = Brush.Red
};
drawingView.OnDrawingLineCompleted += async (s, e) =>
{
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
var stream = await e.LastDrawingLine.GetImageStream(gestureImage.Width, gestureImage.Height, Colors.Gray.AsPaint(), cts.Token);
gestureImage.Source = ImageSource.FromStream(() => stream);
};
// get stream from lines collection
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
var lines = new List<IDrawingLine>();
var stream1 = await DrawingView.GetImageStream(
lines,
new Size(gestureImage.Width, gestureImage.Height),
Colors.Black.
cts.Token);
// get steam from the current DrawingView
var stream2 = await drawingView.GetImageStream(gestureImage.Width, gestureImage.Height, cts.Token);
Properti
Properti | Tipe | Deskripsi |
---|---|---|
Garis | ObservableCollection<IDrawingLine> |
IDrawingLine Kumpulan yang saat ini ada diDrawingView |
IsMultiLineModeEnabled | bool |
Mengalihkan mode multibaris. Jika benar, beberapa garis dapat digambar saat DrawingView ketuk/klik dilepaskan di antara garis. Catatan: saat ClearOnFinish juga diaktifkan, garis dibersihkan setelah ketuk/klik dilepaskan. Selain itu, DrawingLineCompletedCommand akan ditembakkan setelah setiap baris yang digambar. |
ShouldClearOnFinish | bool |
Menunjukkan apakah DrawingView dibersihkan setelah melepaskan ketuk/klik dan garis digambar. Catatan: ketika IsMultiLineModeEnabled juga diaktifkan, ini dapat menyebabkan perilaku tak terduga. |
DrawingLineStartedCommand | ICommand |
Perintah ini dipanggil setiap kali gambar baris pada DrawingView telah dimulai. |
DrawingLineCancelledCommand | ICommand |
Perintah ini dipanggil setiap kali gambar baris pada DrawingView telah dibatalkan. |
DrawingLineCompletedCommand | ICommand |
Perintah ini dipanggil setiap kali gambar baris pada DrawingView telah selesai. . Perhatikan bahwa ini diaktifkan setelah ketukan atau klik diangkat. Ketika MultiLineMode diaktifkan, perintah ini diaktifkan beberapa kali. |
PointDrawnCommand | ICommand |
Perintah ini dipanggil setiap kali gambar titik pada DrawingView telah selesai. |
OnDrawingLineStarted | EventHandler<DrawingLineStartedEventArgs> |
DrawingView peristiwa terjadi saat garis gambar dimulai. |
OnDrawingLineCancelled | EventHandler<EventArgs> |
DrawingView peristiwa terjadi saat garis gambar dibatalkan. |
OnDrawingLineCompleted | EventHandler<DrawingLineCompletedEventArgs> |
DrawingView peristiwa terjadi saat garis gambar selesai. |
OnPointDrawn | EventHandler<PointDrawnEventArgs> |
DrawingView peristiwa terjadi ketika titik digambar. |
Warna Garis | Color |
Warna yang digunakan secara default untuk menggambar garis pada DrawingView . |
LineWidth | float |
Lebar yang digunakan secara default untuk menggambar garis pada DrawingView . |
Garis Gambar
DrawingLine
berisi daftar titik dan memungkinkan konfigurasi setiap gaya baris satu per satu.
Properti
Properti | Tipe | Deskripsi | Nilai default |
---|---|---|---|
Warna Garis | Color |
Warna yang digunakan untuk menggambar garis pada DrawingView . |
Colors.Black |
LineWidth | float |
Lebar yang digunakan untuk menggambar garis pada DrawingView . |
5 |
Titik | ObservableCollection<PointF> |
Koleksi PointF yang membuat garis. |
new() |
Granularitas | int |
Granularitas garis ini. Nilai min adalah 5. Semakin tinggi nilai, semakin halus garis, semakin lambat program. | 5 |
ShouldSmoothPathWhenDrawn | bool |
Mengaktifkan atau menonaktifkan jika baris ini dihaluskan (anti-alias) saat digambar. | false |
IDrawingLine Kustom
Ada 2 langkah untuk mengganti default DrawingLine
dengan implementasi kustom:
- Buat kelas kustom yang mengimplementasikan
IDrawingLine
:public class MyDrawingLine : IDrawingLine { public ObservableCollection<PointF> Points { get; } = new(); ... }
- Buat kelas kustom yang mengimplementasikan
IDrawingLineAdapter
.public class MyDrawingLineAdapter : IDrawingLineAdapter { public IDrawingLine(MauiDrawingLine mauiDrawingLine) { return new MyDrawingLine { Points = mauiDrawingLine.Points, ... } } }
- Atur kustom
IDrawingLineAdapter
diIDrawingViewHandler
:var myDrawingLineAdapter = new MyDrawingLineAdapter(); drawingViewHandler.SetDrawingLineAdapter(myDrawingLineAdapter);
DrawingLineStartedEventArgs
Argumen peristiwa yang berisi titik gambar terakhir.
Properti
Properti | Tipe | Deskripsi |
---|---|---|
Titik | PointF |
Titik gambar terakhir. |
DrawingLineCompletedEventArgs
Argumen peristiwa yang berisi baris gambar terakhir.
Properti
Properti | Tipe | Deskripsi |
---|---|---|
LastDrawingLine | IDrawingLine |
Garis gambar terakhir. |
PointDrawnEventArgs
Argumen peristiwa yang berisi titik gambar terakhir.
Properti
Properti | Tipe | Deskripsi |
---|---|---|
Titik | PointF |
Titik gambar terakhir. |
Metode
Metode | Deskripsi |
---|---|
GetImageStream | Mengambil gambar Stream Lines yang berisi gambar yang saat ini digambar pada DrawingView . |
GetImageStream (statis) | Mengambil gambar yang Stream berisi kumpulan IDrawingLine yang disediakan sebagai parameter. |
Contoh
Anda dapat menemukan contoh fitur ini dalam tindakan di Aplikasi Sampel Toolkit Komunitas .NET MAUI.
API
Anda dapat menemukan kode sumber untuk DrawingView
lebih pada repositori GitHub .NET MAUI Community Toolkit.
.NET MAUI Community Toolkit