2011-07-26 53 views
8

我是Android新手。我正在開發一個需要用戶簽名的應用程序。我如何在Android中捕獲簽名?如何捕捉人物簽名

+0

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

+0

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

回答

8

你的問題有點太寬泛。試着問一個關於具體問題的問題,而不是「我該如何做一些一般的事情」。有關如何提問的更多信息,請參閱FAQ

這裏雖然是一個模糊的概念:

  1. 你會希望有一個畫布對象,可以允許用戶繪製到屏幕上。這裏是關於它的一個鏈接。 Android drawing a line to follow your finger

  2. 那麼你會希望給位圖文件輸出:Save bitmap to location

+0

感謝citizen conn http://developer.android.com/resources/samples/ApiDemos/src/com/例如/機器人的/ apis /圖形/ TouchPaint.htm我提到這個鏈接。但現在我得到這一行中的錯誤公共類TouchPaint擴展GraphicsActivity {}圖形活動未找到 – ragu

+0

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

0

許多應用程序都要求他們的用戶接受的協議,但我不能想到一個我用這問我的實際簽名。

是否有很好的理由讓您的用戶無法以通常的方式接受年終協議? (通過複選框或點擊標有「我接受」的按鈕?)

  • 爲什麼需要用戶簽名的圖形表示?
  • 使用手指難以書寫,而且在智能手機屏幕上使用手指寫入更加困難。

還有與獲得用戶簽名的圖形表示有關的隱私問題。一旦獲得,我不知道你的公司將如何處理我的簽名。簽名是有價值的個人信息,最終可能用於身份盜用。

+0

實際上此應用程序保存用戶的個人信息,以確保要求籤名 – ragu

+0

應用程序我正在處理與發行人簽名的打印違規行爲。沒有它,它只是一個很好格式化的文本文件。我想他們可以用筆在打印件上寫下,但這不是很2014年嗎? – samosaris

6

您可以通過兩種方式來實現:

1.自己的實現

您可以使用畫布繪製簽名。使用繪畫對象設置簽名筆觸大小&顏色。

2.簡單地使用圖書館

SignatureView庫。它會做到一切,你想要什麼。

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

+1

SignatureView使用起來相當簡單:) –

2

這是我怎麼也捕捉人的簽名,並使用這個庫保存圖片:

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

首先添加下列內容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 ""; 

    } 
} 

不要忘了給讀寫權限在manifest.xml中

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

hii,我不能在我的演示項目中籤名。我已經完成了相同的代碼。 – Dharmishtha

+0

嗨它解決了。這是我的錯誤。我採取這個,所以它不工作。 '@Override public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState){}' – Dharmishtha