2011-07-26 29 views
8

Soy nuevo en Android. Estoy desarrollando una aplicación que requiere una firma de usuario. ¿Cómo puedo capturar una firma en Android?Cómo capturar la firma humana

+0

http://corner.squareup.com/ 2010/07/smooth-signatures.html – jacktrades

+0

use https://github.com/zahid-ali-shah/SignatureView – penguin

Respuesta

8

Su pregunta es demasiado amplia. Intente hacer una pregunta sobre un problema específico, no "cómo hago algo general". Consulte FAQ para obtener más información acerca de cómo hacer una pregunta.

Aquí es una idea vaga sin embargo:

  1. Usted querrá tener un objeto de tela que puede permitir al usuario dibujar en la pantalla. Aquí hay un enlace sobre SO al respecto. Android drawing a line to follow your finger

  2. entonces usted querrá a la salida de ese mapa de bits como un archivo: Save bitmap to location

+0

Gracias, conn de ciudadano http://developer.android.com/resources/samples/ApiDemos/src/com/ example/android/apis/graphics/TouchPaint.htm Remití este enlace. pero ahora estoy recibiendo un error en esta línea de clase pública TouchPaint extiende GraphicsActivity {} graphicsactivity no encontrado – ragu

+0

lea esto: http://stackoverflow.com/questions/3752003/need-to-implement-signature-capture/4875322#4875322 –

0

Muchas aplicaciones piden a sus usuarios a aceptar un acuerdo, pero no puedo pensar en que he utilizado eso es me preguntó por mi firma real.

¿Hay alguna buena razón por la que sus usuarios no puedan aceptar su acuerdo de la forma habitual? (a través de una casilla de verificación o presionando un botón marcado como 'Acepto'?)

  • ¿Por qué es necesaria una representación gráfica de la firma de los usuarios?
  • Es difícil escribir con el dedo, y es aún más difícil escribir (con un dedo) en la pantalla de un teléfono inteligente.

También existen problemas de privacidad relacionados con la obtención de una representación gráfica de la firma de un usuario. Una vez obtenido, no tengo idea de qué hará su empresa con mi firma. Una firma es una valiosa información personal que, en última instancia, podría utilizarse para el robo de identidad.

+0

En realidad esta aplicación guarda la información personal del usuario, para garantizar que solicite la aplicación de firma – ragu

+0

estoy trabajando en violaciones de impresiones con la firma del emisor. Sin él, es solo un documento de texto muy bien formateado. Supongo que podrían escribir en la impresión con un bolígrafo, pero eso no es muy 2014 ¿verdad? – samosaris

6

Puede hacerlo de dos maneras:

1. Su propia implementación

Puede utilizar el lienzo para dibujar firmas. Utilice el objeto de pintura para establecer el tamaño del trazo de firma & color.

2. Simplemente uso de la biblioteca

Ver SignatureView biblioteca. Hará todo, lo que quieras.

https://github.com/zahid-ali-shah/SignatureView

+1

SignatureView es bastante simple de usar :) –

2

Así es como tengo la firma humano capturar y guardar la imagen utilizando esta biblioteca:

https://github.com/zahid-ali-shah/SignatureView

primero Añadir siguiente a su 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 ""; 

    } 
} 

No se olvide de dar permiso de lectura y escritura manifest.xml

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
+0

hii, no puedo hacer la firma en mi proyecto de demostración. He hecho el mismo código que tú. – Dharmishtha

+0

Hii está resuelto. Es mi error . Lo tomé así que no está funcionando. '@Override public void onCreate (@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {}' – Dharmishtha

Cuestiones relacionadas