How to capture human signature [closed]
Your question is a little too broad. Try asking a question about a specific problem, not "how do I do something general". See the FAQ for more information about how to ask a question.
Here is a vague idea though:
You'll want to have a canvas object that can allow the user to draw to the screen. Here is a link on SO about it. Android drawing a line to follow your finger
Then you'll want to output that bitmap as a file: Save bitmap to location
You can do this in two ways:
1. Your own Implementation
You can use canvas to draw signatures. Use paint object to set signature stroke size & color.
2. Simply use library
See SignatureView library. It will do all, what you want.
Here's how I have capture human signature and save image using this example:
https://demonuts.com/android-capture-digital-signature/
First add following to your gradle:
repositories { jcenter() } repositories { maven { url 'https://dl.bintray.com/zahid/maven/' } } dependencies { compile 'com.kyanogen.signatureview:signature-view:1.0' }
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.parsaniahardik.signaturedemo.MainActivity"> <com.kyanogen.signatureview.SignatureView xmlns:sign="http://schemas.android.com/apk/res-auto" android:id="@+id/signature_view" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" sign:penSize="5dp" sign:backgroundColor="#ffffff" sign:penColor="#000000" sign:enableSignature="true"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/clear" android:text="clear"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/save" android:text="save"/></LinearLayout>
MainActivity.java:
package com.example.parsaniahardik.signaturedemo;import android.graphics.Bitmap;import android.media.MediaScannerConnection;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import com.kyanogen.signatureview.SignatureView;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.Calendar;public class MainActivity extends AppCompatActivity { Bitmap bitmap; Button clear,save; SignatureView signatureView; String path; private static final String IMAGE_DIRECTORY = "/signdemo"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); signatureView = (SignatureView) findViewById(R.id.signature_view); clear = (Button) findViewById(R.id.clear); save = (Button) findViewById(R.id.save); clear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { signatureView.clearCanvas(); } }); save.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { bitmap = signatureView.getSignatureBitmap(); path = saveImage(bitmap); } }); } public String saveImage(Bitmap myBitmap) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); myBitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes); File wallpaperDirectory = new File( Environment.getExternalStorageDirectory() + IMAGE_DIRECTORY /*iDyme folder*/); // have the object build the directory structure, if needed. if (!wallpaperDirectory.exists()) { wallpaperDirectory.mkdirs(); Log.d("hhhhh",wallpaperDirectory.toString()); } try { File f = new File(wallpaperDirectory, Calendar.getInstance() .getTimeInMillis() + ".jpg"); f.createNewFile(); FileOutputStream fo = new FileOutputStream(f); fo.write(bytes.toByteArray()); MediaScannerConnection.scanFile(MainActivity.this, new String[]{f.getPath()}, new String[]{"image/jpeg"}, null); fo.close(); Log.d("TAG", "File Saved::--->" + f.getAbsolutePath()); return f.getAbsolutePath(); } catch (IOException e1) { e1.printStackTrace(); } return ""; }}
Don't forget to give READ-WRITE permission in manifest.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>