2011-07-26 15 views
8

Jestem nowy na Androida. Zajmuję się tworzeniem aplikacji wymagającej podpisu użytkownika. Jak mogę przechwycić podpis w systemie Android?Jak przechwytywać ludzki podpis

+0

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

+0

używać https://github.com/zahid-ali-shah/SignatureView – penguin

Odpowiedz

8

Twoje pytanie jest nieco zbyt szerokie. Spróbuj zadać pytanie dotyczące określonego problemu, a nie "jak zrobić coś ogólnego". Zobacz FAQ, aby uzyskać więcej informacji na temat zadawania pytań.

Oto mgliste pojęcie choć:

  1. Będziesz chcą mieć obiekt płótno, które mogą umożliwić użytkownikowi rysować na ekranie. Oto link na temat SO. Android drawing a line to follow your finger

  2. Następnie będziemy chcieli wyjściu że bitmapę jako plik: Save bitmap to location

+0

dzięki citizen conn http://developer.android.com/resources/samples/ApiDemos/src/com/ przykład/android/apis/graphics/TouchPaint.htm Odsyłam ten link. ale teraz dostaję błąd w tej linii publiczna klasa TouchPaint rozszerza GraphicsActivity {} graphicsactivity nie znaleziono – ragu

+0

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

0

Wiele aplikacji proszą użytkowników, aby zaakceptować umowę, ale nie mogę myśleć o jednej Użyłem to zapytał mnie o mój prawdziwy podpis.

Czy istnieje dobry powód, dla którego użytkownicy nie są w stanie zaakceptować umowy w zwykły sposób? (poprzez pole wyboru lub przez naciśnięcie przycisku oznaczonego "Akceptuję"?)

  • Dlaczego wymagane jest graficzne przedstawienie podpisu użytkownika?
  • Trudno jest pisać palcem, a jeszcze trudniej jest napisać (używając palca) na ekranie smartfonu.

Istnieją również obawy dotyczące prywatności związane z uzyskaniem graficznego przedstawienia podpisu użytkownika. Raz uzyskany, nie mam pojęcia, co firma zrobi z moim podpisem. Podpis jest cenną informacją osobistą, którą można ostatecznie wykorzystać do kradzieży tożsamości.

+0

Właściwie ta aplikacja zapisuje dane osobowe użytkownika, aby upewnić się, że z prośbą o podpis – ragu

+0

App pracuję nad drukuje naruszenia z podpisem wystawcy. Bez tego jest to tylko dobrze sformatowany dokument tekstowy. Przypuszczam, że mogliby pisać na wydruku za pomocą pióra, ale to nie jest 2014, prawda? – samosaris

6

Można to zrobić na dwa sposoby:

1. własnej implementacji

Można użyć płótna zwrócić podpisów. Użyj obiektu malowania, aby ustawić kolor skoku podpisu o rozmiarze &.

2. Wystarczy użyć biblioteki

Zobacz SignatureView bibliotece. Zrobi wszystko, co chcesz.

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

+1

SignatureView jest dość prosty w użyciu :) –

2

Oto jak mam przechwytywania podpis ludzkiego i zapisać obraz przy użyciu tej biblioteki:

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

najpierw dodać do swojego Gradle następujący:

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 ""; 

    } 
} 

Nie zapomnij dać uprawnienia do odczytu w manifest.xml

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

hii, nie mogę zrobić podpisu w moim projekcie demonstracyjnym. Zrobiłem ten sam kod, co ty. – Dharmishtha

+0

Hii rozwiązano. To mój błąd. Wziąłem to, więc to nie działa. '@Override public void onCreate (@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {}' – Dharmishtha

Powiązane problemy