Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Unterschriften-Feld

Das Thema "Unterschriften-Feld" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 14.09.2011, 07:35   #1 (permalink)
Fortgeschrittenes Mitglied

Modell: HTC Sensation

Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
Frage

Hallo,

hat sich schon mal jemand damit beschäftigt, eine Unterschrift in seiner App entgegenzunehmen? Es muß auch kein großartiger Check oder so gemacht werden, quasi bräuchte man sowas wie "paint light" oder so. Also einfach ein Feld, wo man (mit dem Finger?) seinen Karl Otto zeichnen kann und dann als Grafik abspeichern. Jemand eine Idee?

Hab auch schon gegoogelt, aber da finde ich irgendwie nur fertige Apps von Drittanbietern, aber nichts, wie man sowas selbst entwickelt ...


Gruß,
Tom

Ich hab jetzt doch noch was gefunden:
TouchPaint.java | Android Developers

Allerdings läuft das erst ab Api Level 9 (2.3.1) und blendet die Linien auch wieder aus. Aber ich denke als Grundlage sollte es genügen, wenn es auch viel mehr macht als ich will ;-)

Ein einfacheres Beispiel (am besten ab Api Level 4) ist natürlich gerne gesehen :-)

Geändert von Kev (26.03.2012 um 19:22 Uhr) Grund: Doppelpost... Bitte vermeiden und Ändernbutton nutzen...
Tom299 ist offline   Mit Zitat antworten
Alt 14.09.2011, 09:23   #2 (permalink)
Android-Hilfe.de Mitglied

Modell: Motorola Atrix 4G

Registriert seit: 07.12.2010
Beiträge: 170
Abgegebene Danke: 14
Erhielt 32 Danke für 31 Beiträge
Neeldarax eine Nachricht über ICQ schicken
Standard AW: Unterschriften-Feld

Hi Tom299,

du nimmst eine Klasse leitest diese vom View ab.
Aktivierst DrawingCache.

onTouchListener, onClickListener -> fährst du mit dem Finger über den Screen wird mehrmals onTouch ausgelösst, lässte los, onClick.. voila eine Linie mit paar Punkten.

Methode onDraw(Canvas) überschreiben.
canvas.drawLine von Punkt zu Punkt .

Wenne fertig bist, nimmste den Cache und du hast ein Bitmap/Drawable was du als Array abspeichern kannst *g

Gibt bestimmtt effektive Alternativen, aber diese funktioniert und als Ansatz sollte ja reichen

regards
__________________
g o o g l e+ plus.neeldarax.de
androidblog www.neeldarax.de
Neeldarax ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei Neeldarax für diesen Beitrag:
Tom299 (14.09.2011)
Alt 14.09.2011, 14:25   #3 (permalink)
Fortgeschrittenes Mitglied

Modell: HTC Sensation

Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
Standard AW: Unterschriften-Feld

Ich habs hinbekommen, hab mich aber dann doch am original Code-Beispiel orientiert, ansonsten müßte ich mir alle gezeichneten Linien merken, was ich aber nicht will usw.

Falls jemand mal sowas in der Art braucht, hier meine kleine Beispiel-App:

Code:
package test.de;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class Unterschrift extends Activity {
    
    private static final int MENU_CLEAR = Menu.FIRST;
    private static final int MENU_SAVE = Menu.FIRST+1;
    private static final int MENU_LOAD = Menu.FIRST+2;
    
    private DrawView drawView = null;
    
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        drawView = new DrawView(this);
        drawView.setBackgroundColor(Color.WHITE);
        setContentView(drawView);
        drawView.requestFocus();
    }
    
    @Override public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(0, MENU_CLEAR, 0, "Clear");
        menu.add(0, MENU_SAVE, 0, "Save");
        menu.add(0, MENU_LOAD, 0, "Load");
        return super.onCreateOptionsMenu(menu);
    }
    
    @Override public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case MENU_CLEAR:
                drawView.clearBitmap();
                return true;
            case MENU_SAVE:
                drawView.saveBitmap();
                return true;
            case MENU_LOAD:
                drawView.loadBitmap();
                return true;                
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}
Code:
package test.de;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Environment;
import android.view.MotionEvent;
import android.view.View;


public class DrawView extends View {

    private Paint paint = new Paint();
    private float lastX, lastY;
    private boolean drawing = false;
    
    private Bitmap bitmap;
    private Canvas canvas;

    
    public DrawView(Context context) {
        super(context);
        setFocusable(true);
        paint.setAntiAlias(true);
        paint.setARGB(255, 255, 255, 255);        
    }
    
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);
        canvas = new Canvas(bitmap);
        if (bitmap != null) {
            canvas.drawBitmap(bitmap, 0, 0, null);
        }        
        invalidate();
    }
    
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        
        if (bitmap != null) {
            canvas.drawBitmap(bitmap, 0, 0, null);
        }        
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            drawPoint(event.getX(), event.getY(), event.getPressure());
            return true;
        }
        else if (event.getAction() == MotionEvent.ACTION_UP) {
            drawing = false;
            return true;
        }
        else if (event.getAction() == MotionEvent.ACTION_MOVE) {
            drawing = true;
            drawPoint(event.getX(), event.getY(), event.getPressure());
            return true;            
        }
        
        return false;
    }
    
    private void drawPoint(float x, float y, float pressure) {
        if (bitmap != null) {            
            //int pressureLevel = (int)(pressure * 255);
            //paint.setARGB(pressureLevel, 255, 255, 255);
            paint.setARGB(255, 255, 255, 255);
            if (drawing) {
                canvas.drawLine(lastX, lastY, x, y, paint);
            }
            else {
                canvas.drawPoint(x, y, paint);
            }

            lastX = x;
            lastY = y;

            invalidate();
        }        
    }
    
    public void clearBitmap() {
        if (canvas != null) {
            paint.setARGB(0xff, 0, 0, 0);
            canvas.drawPaint(paint);
            invalidate();
        }
    }
    
    public void saveBitmap() {
        if (bitmap != null) {
            try {
                String path = Environment.getExternalStorageDirectory() + "/unterschrift/signatures";
                File dir = new File(path);
                if (!dir.exists() || !dir.isDirectory()) {
                    dir.mkdirs();
                }
                File file = new File(dir.getAbsolutePath() + "/signature.png");
                FileOutputStream fos;
                fos = new FileOutputStream(file);
                bitmap.compress(CompressFormat.PNG, 100, fos);
                fos.close();                
            } 
            catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            catch (IOException io) {
                io.printStackTrace();
            }            
        }
    }
    
    public void loadBitmap() {
        String path = Environment.getExternalStorageDirectory() + "/unterschrift/signatures/signature.png";
        Bitmap bmp = BitmapFactory.decodeFile(path);
        if (bmp != null) {
            if (canvas != null) {
                canvas.drawBitmap(bmp, 0, 0, null);
            }
            invalidate();
        }
    }
}
in die manifest noch:
Code:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
danach sollte man malen, speichern und laden können
Tom299 ist offline   Mit Zitat antworten
Alt 26.03.2012, 15:28   #4 (permalink)
Neuer Benutzer

Registriert seit: 29.01.2012
Beiträge: 3
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard AW: Unterschriften-Feld

Hallo Tom,

super vielen Dank für das Beispiel. Funktioniert einwandfrei und hat mir sehr geholfen!!!!
colt.s ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
TicTacToe-Feld erstellen Nivel Android App Entwicklung 0 03.06.2011 10:37
Virtuelle Tastatur bei Klick auf EditText Feld deaktivieren Danny787 Android App Entwicklung 0 01.06.2011 01:15
abnormales magnetischhes feld elLoko HTC Legend Forum 14 09.04.2011 20:53
Feld mit Nummern pemko Android App Entwicklung 4 12.10.2010 11:06
Funambol: Adressen stehen komplet im Feld Ort speerwerfer Sonstige Apps & Widgets 0 28.05.2010 08:41




Du liest gerade: "Unterschriften-Feld" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.