web-dev-qa-db-ja.com

人間の署名をキャプチャする方法

私はAndroidを初めて使用します。ユーザーの署名が必要なアプリケーションを開発しています。 Androidで署名をキャプチャするにはどうすればよいですか?

13
ragu

あなたの質問は少し広すぎます。 「一般的なことをどのように行うか」ではなく、特定の問題について質問してみてください。質問する方法の詳細については、 [〜#〜] faq [〜#〜] を参照してください。

ただし、漠然とした考えは次のとおりです。

  1. ユーザーが画面に描画できるようにするキャンバスオブジェクトが必要になります。これはSOそれについてです。 Androidは指をたどるために線を引く のリンクです。

  2. 次に、そのビットマップをファイルとして出力する必要があります。 ビットマップを場所に保存

10
citizen conn

これは2つの方法で実行できます。

1。あなた自身の実装

キャンバスを使用して署名を描くことができます。ペイントオブジェクトを使用して、署名のストロークのサイズと色を設定します。

2。単にライブラリを使用する

SignatureViewライブラリを参照してください。それはあなたが望むすべてを行います。

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

8
user4774371

この例を使用して、人間の署名をキャプチャし、画像を保存する方法は次のとおりです。

https://demonuts.com/Android-capture-digital-signature/

まず、以下を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 "";

    }
}

マニフェスト.xmlで読み取り/書き込み権限を与えることを忘れないでください

 <uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
 <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>
3
Parsania Hardik

多くのアプリケーションはユーザーに同意を求めるものですが、実際の署名を求められたものを使用したことは考えられません。

ユーザーが通常の方法で年次契約を受け入れることができない正当な理由はありますか? (チェックボックスを介して、または「同意する」とマークされたボタンを押すことによって?)

  • ユーザーの署名のグラフィック表現が必要なのはなぜですか?
  • 指で書くのは難しく、スマートフォンの画面で(指で)書くのはさらに難しいです。

ユーザーの署名のグラフィック表現の取得に関連するプライバシーの懸念もあります。一度取得すると、あなたの会社が私の署名で何をするのかわかりません。署名は貴重な個人情報であり、最終的には個人情報の盗難に使用される可能性があります。

0
codeinthehole