Speichern Sie das Bild, hergestellt durch den Benutzer in fingerPaint-api-demos in android
Hey Leute
Ich bin versucht, bauen eine Signatur-task Anwendung .
In dem der Benutzer die Signatur erstellt, die auf Berührung und das bitmap sollte im Telefon gespeichert.
Erstellt habe ich 2-Klasse-Dateien mit der benutzerdefinierten Ansicht die gleiche wie die in fingerpaint-Anwendung und rufen Sie die Ansicht in main.xml Datei.
In meine main-Applikation class-Datei habe ich Menü-Schaltfläche, die auf klicken Sie speichert die bitmap in sdcard . Der folgende code ist der code :-
package org.testCircle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.os.Bundle;
import android.provider.MediaStore.Images;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;
public class testCircle extends Activity {
TextView tv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(new customView(this));
setContentView(R.layout.main);
}
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, 1, 0, "save").setShortcut('3', 'c');
return true;
}
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
//new ColorPickerDialog(this, this, mPaint.getColor()).show();
fingerPaint cv = new fingerPaint(this);
Bitmap viewBitmap = Bitmap.createBitmap(480, 800,Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(viewBitmap);
cv.draw(canvas);
String url = Images.Media.insertImage(getContentResolver(), viewBitmap, "title", null);
Toast.makeText(testCircle.this, url, Toast.LENGTH_LONG).show();
return true;
}
return super.onOptionsItemSelected(item);
}
}
Benutzerdefinierte Ansicht :-
package org.testCircle;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class fingerPaint extends View {
Paint mPaint;
private static final float MINP = 0.25f;
private static final float MAXP = 0.75f;
private static Bitmap mBitmap;
private Canvas mCanvas;
private Path mPath;
private Paint mBitmapPaint;
public fingerPaint(Context c) {
super(c);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(0xFFFF0000);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(12);
mBitmap = Bitmap.createBitmap(320, 480, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
mPath = new Path();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
}
public fingerPaint(Context c , AttributeSet attrs){
super(c , attrs);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(0xFFFF0000);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(12);
mBitmap = Bitmap.createBitmap(320, 480, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
mPath = new Path();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
}
public void onerase(){
mCanvas=null;
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(0xFFAAAAAA);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
}
private float mX, mY;
private static final float TOUCH_TOLERANCE = 4;
private void touch_start(float x, float y) {
mPath.reset();
mPath.moveTo(x, y);
mX = x;
mY = y;
}
private void touch_move(float x, float y) {
float dx = Math.abs(x - mX);
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
mX = x;
mY = y;
}
mCanvas.drawBitmap(mBitmap, mX, mY, mPaint);
}
private void touch_up() {
mPath.lineTo(mX, mY);
//commit the path to our offscreen
mCanvas.drawPath(mPath, mPaint);
//kill this so we don't double draw
mPath.reset();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
touch_start(x, y);
invalidate();
break;
case MotionEvent.ACTION_MOVE:
touch_move(x, y);
invalidate();
break;
case MotionEvent.ACTION_UP:
touch_up();
invalidate();
Bundle b = new Bundle();
break;
}
return true;
}
}
- und was ist die Frage?
- ich kann nicht speichern Sie das Bild, das die Signatur enthält, die der Benutzer durch berühren ; aber ich kann speichern Sie das erste Bild enthält nur den hintergrund und nicht die Signatur
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist der Quellcode zu tun, dass
Hoffe das funktioniert bei dir auch.
Du hast ein Bitmap-Objekt in Ihrem fingerPaint-Klasse. Instanziieren einen FileOutputStream zu der Position, die Sie speichern möchten, und rufen Sie mBitmap.compress-Methode mit den entsprechenden Optionen und Ihre output-stream. Erinnern zu schließen stream.
Schließlich fügen Sie die Berechtigung in Ihrer Manifest-Datei:
< uses-permission android:name="android.die Genehmigung.WRITE_EXTERNAL_STORAGE" />