Siemka. Mam problem. Otóż, jak chcę przejść poprzez przycisk do zapisania canvasa jako obrazek .png apka się wysypuje. Dodam, że na innym projekcie wszystko działa.
Najwięcej krzyku jest o to:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Bitmap artfusion.upowaznienia.SimpleDrawingView.saveSignature()' on a null object reference
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: FATAL EXCEPTION: main
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: Process: artfusion.upowaznienia, PID: 13352
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Bitmap artfusion.upowaznienia.SimpleDrawingView.saveSignature()' on a null object reference
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: at artfusion.upowaznienia.Rysuj$1.onClick(Rysuj.java:28)
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: at android.view.View.performClick(View.java:4780)
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:19866)
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: at android.os.Looper.loop(Looper.java:135)
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5254)
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
06-07 21:01:56.155 13352-13352/artfusion.upowaznienia E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
import android.app.IntentService;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.os.Environment;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
public class SimpleDrawingView extends View {
private final int paintColor = Color.BLACK;
private Paint drawPaint;
private Path path = new Path();
Context context;
public SimpleDrawingView(Context context, AttributeSet attrs) {
super(context, attrs);
setFocusable(true);
setFocusableInTouchMode(true);
setupPaint();
}
private void setupPaint() {
drawPaint = new Paint();
drawPaint.setColor(paintColor);
drawPaint.setAntiAlias(true);
drawPaint.setStrokeWidth(5);
drawPaint.setStyle(Paint.Style.STROKE);
drawPaint.setStrokeJoin(Paint.Join.ROUND);
drawPaint.setStrokeCap(Paint.Cap.ROUND);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawPath(path, drawPaint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float pointX = event.getX();
float pointY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(pointX, pointY);
return true;
case MotionEvent.ACTION_MOVE:
path.lineTo(pointX, pointY);
break;
default:
return false;
}
postInvalidate();
return true;
}
public Bitmap saveSignature(){
Bitmap bitmap = Bitmap.createBitmap(this.getWidth(), this.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
this.draw(canvas);
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +File.separator +"lololo.png");
try {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, new FileOutputStream(file));
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
}
public class Rysuj extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rysuj);
//sv=(SurfaceView)findViewById(R.id.surfaceView);
Button buttonZapiszPodpis = (Button)findViewById(R.id.buttonZapiszPodpis);
buttonZapiszPodpis.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "Zapisano!", Toast.LENGTH_LONG).show();
SimpleDrawingView podpis = (SimpleDrawingView)findViewById(R.id.simpleDrawingView1);
podpis.saveSignature();
}
});
}
}