Giter VIP home page Giter VIP logo

signaturepad's Introduction

Signature Pad

Build Status Build Status

SignaturePad NuGet SignaturePad Xamairn.Forms NuGet

Signature Pad makes capturing, saving, exporting, and displaying signatures extremely simple on Xamarin.iOS, Xamarin.Android and Windows.

Not only is Signature Pad available for native apps, but also available in Xamarin.Forms apps.

Screenshot


Using Signature Pad

Signature Pad can be installed from NuGet.org for native Xamarin and Windows apps:

nuget install Xamarin.Controls.SignaturePad

And also for Xamarin.Forms apps:

nuget install Xamarin.Controls.SignaturePad.Forms

Using Signature Pad on iOS

using Xamarin.Controls;

var signatureView = new SignaturePadView (View.Frame) {
	StrokeWidth = 3f,
	StrokeColor = UIColor.Black,
	BackgroundColor = UIColor.White,
};

Using Signature Pad on Android

using Xamarin.Controls;

var signatureView = new SignaturePadView (this) {
	StrokeWidth = 3f,
	StrokeColor = Color.White,
	BackgroundColor = Color.Black
};

Using Signature Pad on Windows

<!-- xmlns:controls="using:Xamarin.Controls" -->

<controls:SignaturePad
	x:Name="signatureView"
	StrokeWidth="3"
	StrokeColor="White"
	Background="Black" />

Using Signature Pad on Xamarin.Forms

<!-- xmlns:controls="clr-namespace:SignaturePad.Forms;assembly=SignaturePad.Forms" -->

<controls:SignaturePadView
	x:Name="signatureView"
	StrokeWidth="3"
	StrokeColor="BlackWhite"
	BackgroundColor="Black" />

Obtaining a Signature Image

The signature that was drawn on the canvas can be obtained as a image using the GetImage(...) method overloads. The resulting image will be in the native platform image type:

// iOS
UIImage image = signatureView.GetImage ();

// Android
Bitmap image = signatureView.GetImage ();

// Windows
WriteableBitmap bitmap = signatureView.GetImage ();

For Xamarin.Forms, there is no "native" image format, but GetImageStreamAsync can be used instead to retrieve an encoded (jpeg or png) image stream:

Stream bitmap = await signatureView.GetImageStreamAsync (SignatureImageFormat.Png);

Obtaining the Signature Points

In addition to retrieving the signature as an image, the signature can also be retrieved as as an array of points:

var strokes = signatureView.Strokes;

These strokes can be used to save and restore a signature:

// restore strokes (iOS, Android, Windows)
signatureView.LoadStrokes (newStrokes);

// restore strokes (Xamarin.Forms)
signatureView.Strokes = newStrokes;

License

The license for this repository is specified in LICENSE.

.NET Foundation

This project is part of the .NET Foundation.

signaturepad's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

signaturepad's Issues

Cropping not working correctly

Hello everyone,

Am I making a mistake or is the cropping not working correctly in IOS?
(Extra space at the bottom and right)

When I use

GetImage(UIColor.Black, UIColor.Gray, true, true)

I get a result like:
download

Using

GetImage(UIColor.Black, UIColor.Gray, true, false)

Gives me the following result:
download 1

However in Android:

Using:

GetImage(Android.Graphics.Color.Black, Android.Graphics.Color.Gray, true, true

Result:
download 2
)

Using:

GetImage(Android.Graphics.Color.Black, Android.Graphics.Color.Gray, true, false)

Result:
download 3

PS: I'm saving the image as png for transparency, I added the background to demonstrate the extra space

Xamarin.Forms Android: Specified cast is not valid, only in V2.0.0

Hi,
first, thanks for this amazing component!!!

I'm trying to use version 2.0.0, but get the error in the stack trace below. Using version 1.5.1 it is working fine. I have installed the Forms component in my PCL and Android project.

05-07 19:51:23.599 I/MonoDroid(11334): System.InvalidCastException: Specified cast is not valid.
05-07 19:51:23.599 I/MonoDroid(11334):   at (wrapper castclass) System.Object:__castclass_with_cache (object,intptr,intptr)
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Registrar`1[TRegistrable].GetHandler (System.Type type) [0x0001b] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\Registrar.cs:24 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Registrar`1[TRegistrable].GetHandler[TOut] (System.Type type) [0x00000] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\Registrar.cs:29 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x00006] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\Platform.cs:288 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x00023] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:84 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00104] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:217 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:68 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:335 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x00111] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:199 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:137 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\Platform.cs:289 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x00023] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:84 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00104] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:217 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:68 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:335 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x00111] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:199 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:137 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\Platform.cs:289 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x00023] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:84 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00104] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:217 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:68 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:335 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].SetElement (TElement element) [0x00111] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:199 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:137 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\Platform.cs:289 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.AppCompat.Platform+ModalContainer..ctor (Android.Content.Context context, Xamarin.Forms.Page modal) [0x00038] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:335 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.AppCompat.Platform.PresentModal (Xamarin.Forms.Page modal, System.Boolean animated) [0x0000d] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:285 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Platform.Android.AppCompat.Platform+<Xamarin-Forms-INavigation-PushModalAsync>d__30.MoveNext () [0x0004a] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:150 
05-07 19:51:23.599 I/MonoDroid(11334): --- End of stack trace from previous location where exception was thrown ---
05-07 19:51:23.599 I/MonoDroid(11334):   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/4468/f913a78a/source/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 
05-07 19:51:23.599 I/MonoDroid(11334):   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00047] in /Users/builder/data/lanes/4468/f913a78a/source/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:187 
05-07 19:51:23.599 I/MonoDroid(11334):   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in /Users/builder/data/lanes/4468/f913a78a/source/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 
05-07 19:51:23.599 I/MonoDroid(11334):   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in /Users/builder/data/lanes/4468/f913a78a/source/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 
05-07 19:51:23.599 I/MonoDroid(11334):   at System.Runtime.CompilerServices.TaskAwaiter.GetResult () [0x00000] in /Users/builder/data/lanes/4468/f913a78a/source/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:113 
05-07 19:51:23.599 I/MonoDroid(11334):   at Xamarin.Forms.Application+NavigationImpl+<OnPushModal>d__3.MoveNext () [0x0008d] in C:\BuildAgent3\work\ca3766cfc22354a1\Xamarin.Forms.Core\Application.cs:338 
05-07 19:51:23.599 I/MonoDroid(11334): --- End of stack trace from previous location where exception was thrown ---

SignaturePadView lost points and cannot load it

Hello,

I have something like a wizard.

  1. I have a page with few fields
  2. I have a page with SignaturePadView
  3. I have a page with few fields

When I fill 1, 2 and then go to 3, I can return to 2, and in this case my Points are missed.

If I set

        _signaturePadView.Points = points;
        _signaturePadView.SignaturePadCanvas.Points = points;

it does not show the points.

Any suggestion?

Pad doesn't work on iOS device, does in simulator

I am using SignaturePad in a PCL project. Pad works great on Android, no issues. I can use the Pad on iOS simulator - 6s 9.3. I can't verify image capture as I have GPS location requirements coded in app which is not supported in simulator - at least MacInClouds. When I deploy it to App store/test flight and run on my personal phone the signature pad displays. I'm running 6s 9.3.4 on my phone. The signature "X", line and clear don't show up. The pad doesn't even respond to my signing with my finger.

SignaturePadView not showing without Height-/WidthRequest set

It took me quite a while to figure out, that the SignaturePadView was not showing up, because I didn't set the HeightRequest and WidthRequest properties. This happened to me while programming on an Xamarin Forms PCL project and testing on iOS (simulator and device).

I think it should work with VerticalOptions and HorizontalOptions too:

            signPad = new SignaturePadView()
            {
                VerticalOptions = LayoutOptions.CenterAndExpand,
                HorizontalOptions = LayoutOptions.CenterAndExpand,
                BackgroundColor = Color.GhostWhite,
                StrokeColor = Color.Black,
                ClearTextColor = Color.Black,
                ClearText = "Neu",
                CaptionText = "Unterschrift",
                CaptionTextColor = Color.Black,
                StrokeWidth = 2,
                PromptText = "Hier unterschreiben",
                PromptTextColor = Color.Black,
                SignatureLineColor = Color.Black,

                // Remove the following two lines and SignaturePadView is not showing up
                HeightRequest = 200,
                WidthRequest = 600,
            };

Add args to GetImageAsStream to give Forms feature parity

Currently on a platform level one can use GetImage method on the platforms with multiple arguments. Would be great if GetImageAsStream() implementation in Forms implementation gave the same options, or at least a subset (for example color cannot be made cross platform - perhaps the option to use the background color property as fill color instead of transparent would suffice here)

Xamarin.Forms Version Android, iOS, UWP

Is there a Xamarin.Forms version of Signature Pad?
I don´t want to add the code for it on every iOS, Android, UWP Project of the solution.
This is a issue that should be adressed.

Yoga Book

Working with lenovo yoga book pad??

Unable to load existing points with Xamarin.Forms for Android & iOS

Hello,

I use version 1.4.0 of SignaturePad with Xamarin.Forms (02.03.2127) for Android projects (Xamarin.Android 6.1.2.21) and iOS (Xamarin.iOS 10.0.0.6).

When I load my page, and I want to reload signature, nothing appears (whether on Android or iOS).

Here is the code used:
padView.Points = signaturePoints;

The variable "signaturePoints" is a point list, saved in the first signature. The list contains several points (over 3000).

Is it normal that nothing appears? Is there another way?

Thank you.

Best Regards.
Julien.

LoadPoints(PointF points) not supported in Xamarin Forms

Hi,

Why is this method LoadPoints(PointF points) not supported in PCL. I am able to make the Points work to retrieve an array of points but unable to reload it on the signature pane in another screen.

Is there any working example that supports this scenario.

Thanks,

Rajesh.

Localizing Clear Label?

Hi! I don't know if this is possible already, so if this can be done, I would appreciate some hints how to do it. We are localizing our application and the ClearLabel property is read only. Is there a way to set that value? Or can this be added to the wish list? Thanks!

Control not working on iOS, works on Android

The control works fine on an Android page. On iOS it displays however there is no Caption, Prompt, signature line. Also, when you sign you cannot see your signature. It is a simple Forms app. Code below less event handler. The Signature Pad is getting created and added to the page because I see the yellow box. There is just nothing else visible or any interaction possible.

public class CaptureSignature : ContentPage {
SignaturePadView signaturePadView;

public CaptureSignature() {
    signaturePadView = new SignaturePadView();

    signaturePadView.BackgroundColor = Color.Yellow;
    signaturePadView.SignatureLineColor = Color.Black;
    signaturePadView.HeightRequest = 150;
    signaturePadView.WidthRequest = 240;
    signaturePadView.StrokeColor = Color.Black;
    signaturePadView.StrokeWidth = 2;
    signaturePadView.CaptionText = "Please sign above";
    signaturePadView.ClearText = "Clear";
    signaturePadView.ClearTextColor = Color.Red;

    Button btnDone = new Button {
        HorizontalOptions = LayoutOptions.Center,
        Text = "Save"
    };
    btnDone.Clicked += BtnDone_Clicked;

    Content = new StackLayout {
        Spacing = 10,
        Children = {
            signaturePadView,
            btnDone
        }
    };
}

}

Not working on Android with Forms

I just updated to 2.0 and iOS works perfectly but android does not. Android worked fine before upgrade. I will revert to an older version for now but the 2.0 update brought a few things that i really liked so i really hope to get this working soon. I am building a Forms app. I have tried cleaning my project and rebuilding.

I just get a blank view where the signature pad should be.

Here is the code i use to load it.

<signature:SignaturePadView x:Name ="padView" BackgroundColor ="White" CaptionText ="Sign here." CaptionTextColor ="Black" ClearText ="Clear" ClearTextColor ="Black" PromptText ="X" PromptTextColor ="Black" SignatureLineColor="Black" StrokeWidth ="3" StrokeColor ="Black" VerticalOptions ="Center" />

iOS:
ios

Android:
android

UWP - MissingInteropException calling SignaturePadView.GetImageStreamAsync with .NET Native

UWP support in version 2.0 was working great in Debug mode until I turned on .NET Native compilation. I receive the below exception calling SignaturePadView.GetImageStreamAsync:

System.Runtime.InteropServices.MissingInteropDataException: EETypeRva:0x0024ca00(System.Linq.Enumerable.WhereSelectEnumerableIterator<Windows.UI.Input.Inking.InkStroke,Windows.UI.Input.Inking.InkStroke>) is missing interop type marshalling data. To enable interop type marshalling data, add a MarshalObject directive to the application rd.xml file. For more information, please visit http://go.microsoft.com/fwlink/?LinkID=393965
   at SharedLibrary!<BaseAddress>+0x713c14
   at SharedLibrary!<BaseAddress>+0x713659
   at SharedLibrary!<BaseAddress>+0x71324c
   at SharedLibrary!<BaseAddress>+0x7131b8
   at SharedLibrary!<BaseAddress>+0x71291a
   at SharedLibrary!<BaseAddress>+0x712835
   at SharedLibrary!<BaseAddress>+0x712776
   at SharedLibrary!<BaseAddress>+0x71253c
   at SharedLibrary!<BaseAddress>+0x8180c6
   at McgInterop.ForwardComSharedStubs.Proc_TArg0__<System.__Canon, System.__Canon>($__ComObject __this, __Canon dp, Int32 __targetIndex) in {snipped}\obj\x64\Debug\ilc\intermediate\Ewn.Mobile.UWP.McgInterop\SharedStubs.g.cs:line 285
   at Microsoft.Graphics.Canvas.ICanvasDrawingSession__Impl.StubClass.DrawInk($__ComObject __this, IEnumerable$1<$InkStroke> inkStrokes) in {snipped}\obj\x64\Debug\ilc\intermediate\Ewn.Mobile.UWP.McgInterop\ImplTypes.g.cs:line 8627
   at Microsoft.Graphics.Canvas.CanvasDrawingSession.DrawInk(IEnumerable$1<$InkStroke> inkStrokes) in {snipped}\obj\x64\Debug\ilc\intermediate\Ewn.Mobile.UWP.McgInterop\SafeTypes.g.cs:line 5212
   at Xamarin.Controls.SignaturePadCanvasView.GetRenderTarget($Size scale, $Rect signatureBounds, $Size imageSize, Single strokeWidth, $Color strokeColor, $Color backgroundColor)
   at Xamarin.Controls.SignaturePadCanvasView.<GetImageStreamInternal>d__13.MoveNext()

Possibly related MSDN post

Setting the SignaturePrompt property has no effect

This snippet:

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();

    View.BackgroundColor = UIColor.White;

    var signature = new SignaturePadView (View.Frame) {
        StrokeWidth = 3f,
        SignaturePrompt = new UILabel {Text="foo"},
    };

    View.AddSubview (signature);
}

produces this screenshot (label at beginning of signature line is missing):

missing signatureprompt

UWP Support

Is UWP supported?
Looks like Windows Phone is (perhaps deprecate this in favor of UWP?)

Showing Empty Panel on Android and No Canvas is showing to capture Signature

Hi,

I have installed SignaturePad.Forms nuget on PCL/ Platform specific projects, and SignaturePad nuget on Android/ iOS projects. However, SignaturePad is working fine on iOS, but not on Android as its not showing the Canvas panel it self and showing empty panel. When I was going through the references added in Android project, SignaturePad assembly is pointing to the assembly which is installed in ..\packages\Xamarin.Controls.SignaturePad.2.1.0\lib\Xamarin.iOS and not the MonoDroid assmebly.

This problem happens only when you want to use/install SignaturePad control on both iOS and Android platforms. And its only working on one platform and on others its just showing empty panel.

Please let me know the exact issue to correct it or fix it if its a nuget package issue.

Thanks,
Ramesh Majji
screenshot_20170613-143445

Crash on Android

Hi, I have noticed the signature pad sometimes crash on Android with the followin stack trace :

Xamarin caused by: android.runtime.JavaProxyThrowable: System.NullReferenceException: Object reference not set to an instance of an object
  at Xamarin.Controls.InkPresenter.TouchesMoved (Android.Views.MotionEvent e, System.Boolean update) [0x00067] in <85c0059a022c40b28061ff048d4abaae>:0 
  at Xamarin.Controls.InkPresenter.OnTouchEvent (Android.Views.MotionEvent e) [0x00029] in <85c0059a022c40b28061ff048d4abaae>:0 
  at Android.Views.View.n_OnTouchEvent_Landroid_view_MotionEvent_ (System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_e) [0x0000f] in <90829cc10e644d66a64f5bb6aa074790>:0 

I was able to reproduce by followin steps:

  • Draw a line. Make sure the clear button is displayed after.
  • Start drawing a new line, and while still drawing, press the clear button with another finger.
  • Continue drawing the line, crash should happen.

Points are inconsistent between each version

Trying to get the points for a signature on each Platform doesn't give the same results:

iOS:
https://github.com/xamarin/SignaturePad/blob/master/src/SignaturePad.iOS/SignaturePadView.cs#L61

//Create an array containing all of the points used to draw the signature. Uses CGPoint.Empty
//to indicate a new line.
public CGPoint[] Points

Android:
https://github.com/xamarin/SignaturePad/blob/master/src/SignaturePad.Android/SignaturePadView.cs#L44

//Create an array containing all of the points used to draw the signature. Uses null
//to indicate a new line.
public System.Drawing.PointF[] Points

Windows Mobile:
https://github.com/xamarin/SignaturePad/blob/master/src/SignaturePad.WP7/SignaturePad.xaml.cs#L35

//Create an array containing all of the points used to draw the signature. Uses (-10000, -10000)
//to indicate a new line.
public Point [] Points

Would it be possible to have all 3 platforms returning Point or PointF and use the same standard for new line?

Missing lines in signature image

I am facing some trouble with this component. 90% of the time, the resulting signature (which I get using the signaturepad.GetImage() method) is missing some lines.

For example, if I sign by drawing XAMARIN as the signature, in the app it all looks perfect, no lines missing (see below):

screenshot-signature

but in the resulting image, a lot of lines are missing (see below)

signature-result

Message: [ObjectDisposedException: Cannot access a disposed object. Object name: 'Android.Graphics.RectF'.]

Thanks to Raygun (crashlog system) we are receiving a lot of this kind of error from our android app.
Here the stacktrace

Java.Interop.JniPeerMembers.AssertSelf(Java.Interop.IJavaPeerable self) in <b72830eae84a465dba3c71c416533d20>:0
 Java.Interop.JniPeerMembers+JniInstanceFields.SetValue(System.String encodedMember, Java.Interop.IJavaPeerable self, System.Single value) in <b72830eae84a465dba3c71c416533d20>:0
 Android.Graphics.RectF.set_Left(System.Single value) in <fc5b043c2b92453a93388ea815daa6f7>:0
 SignaturePad.SignaturePadView.resetBounds(System.Single touchX, System.Single touchY) in <2906e1341ea84a8aa79237e119342274>:0
 SignaturePad.SignaturePadView.handleTouch(Android.Views.MotionEvent e) in <2906e1341ea84a8aa79237e119342274>:0
 SignaturePad.SignaturePadView.OnTouchEvent(Android.Views.MotionEvent e) in <2906e1341ea84a8aa79237e119342274>:0
 Android.Views.View.n_OnTouchEvent_Landroid_view_MotionEvent_(System.IntPtr jnienv, System.IntPtr native__this, System.IntPtr native_e) in <fc5b043c2b92453a93388ea815daa6f7>:0
    (wrapper dynamic-method) System.Object:5c542839-2704-40dc-83c7-07a5daea3fb2 (intptr,intptr,intptr)

Unfortunately we are not able to replicate the error on debug.
This kind of error started after the last update to Google libraries

<package id="Xamarin.Android.Support.Animated.Vector.Drawable"
version="24.2.1" targetFramework="monoandroid70" />
<package id="Xamarin.Android.Support.Compat" version="24.2.1"
targetFramework="monoandroid70" />
<package id="Xamarin.Android.Support.Core.UI" version="24.2.1"
targetFramework="monoandroid70" />
<package id="Xamarin.Android.Support.Core.Utils" version="24.2.1"
targetFramework="monoandroid70" />
<package id="Xamarin.Android.Support.Design" version="24.2.1"
targetFramework="monoandroid70" />
<package id="Xamarin.Android.Support.Fragment" version="24.2.1"
targetFramework="monoandroid70" />
<package id="Xamarin.Android.Support.Media.Compat" version="24.2.1"
targetFramework="monoandroid70" />
<package id="Xamarin.Android.Support.v4" version="24.2.1"
targetFramework="monoandroid70" />
<package id="Xamarin.Android.Support.v7.AppCompat" version="24.2.1"
targetFramework="monoandroid70" />
<package id="Xamarin.Android.Support.v7.RecyclerView" version="24.2.1"
targetFramework="monoandroid70" />
<package id="Xamarin.Android.Support.Vector.Drawable" version="24.2.1"
targetFramework="monoandroid70" /> 

Line breaks, non continuous

When using this component, the lines are not continuous. There is no flow.The attached image was me trying to move my finger around. Any ideas if I'm doing something wrong.
img_7535

Add shouldCrop argument to GetImageAsStream

Previous version of GetImage method had a shouldCrop argument. I believe that GetImageStreamAsync method does not the signature image is always cropped. After upload to a central database server my captured signatures are used in a variety of different environments and handling the cropped signature image has become problematic.

Would appreciate a shouldCrop argument to GetImageStreamAsync method to allow the app to decide whether image should be cropped.

SignaturePad (Xamarin.Forms) not rendering on iOS(10) on a real device

Hi,

I am having trouble implementing the SignaturePad as a view in Xamarin.Forms. Using it like this:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:signature="clr-namespace:SignaturePad.Forms;assembly=SignaturePad.Forms"
             x:Class="MyApp.Views.Util.SignaturePage"
             BackgroundColor="Aqua">

    <signature:SignaturePadView
        HorizontalOptions="FillAndExpand" 
        HeightRequest="150"
        CaptionText="Caption"
        CaptionTextColor="Blue"
        ClearText="Clear Text"
        ClearTextColor="Red"
        PromptText="Prompt text"
        PromptTextColor="Green"
        BackgroundColor="Gray"
        SignatureLineColor="White"
        StrokeWidth="2"
        StrokeColor="Maroon"/>

</ContentPage>

with signature beeing xmlns:signature="clr-namespace:SignaturePad.Forms;assembly=SignaturePad.Forms". Do not get irritated by all the custom properties, I set them for debugging purposes.

Also I referenced the renderer in my ApplicationDelegate's FinishLaunching method as var t = typeof(SignaturePad.Forms.iOS.SignaturePadRenderer);.

The result is a gray screen, indicating that a view is rendered full-size over the aqua colored ContentPage. But there are no controls (no signature line, no clear button, I can't draw on it). I tried to test the library with the sample Xamarin.Forms project... But it is just not compiling.

For the records: In an iPhoneSimulator and generally on Android it is working just fine with the same view implementation.

Anybody got an hint on how to fix this issue?

thanks in advance,
Felix

EDIT: Some more information.

SignatureView memory leak

Signature view always persist in memory, when i analyzed using Instruments. When i looked into it in "Allocations", SignaturePadView (CALayer) Persistent count is keep on increasing every time when i push the viewcontroller, even after i pop the view controller, count is not going down.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.