0
我在android中創建一個應用程序,用戶通過觸摸屏幕創建一個圖形,然後將其保存到存儲。Android:如何在android編程中截圖然後保存到外部存儲?
我的問題是,有時目錄不會創建,有時圖像會保存,但有很多圖像保存在黑色圖像的目錄中。
主要文件保存操作發生在getDrawnMessage()方法中。
這裏是我的代碼
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.os.Environment;
import android.view.MotionEvent;
import android.view.View;
public class DrawWrite extends View {
float TouchXD = 0, TouchYD = 0, TouchXU = 0, TouchYU = 0, TouchXM = 0,
TouchYM = 0; // Define touch co-ordinates
float x1 = 0, y1 = 0, x2 = 0, y2 = 0; // Define drawing path co-ordinates
float stroke = 2; // Define the message structure width
int i=0;
boolean Move = false, moveD = false, moveU = false; // Define whether the
// touch has occurred or
// not
boolean exp = false;
Paint paint = new Paint(); // Paint object
Path mPath = new Path(); // Define the drawing message path
Context context;
public DrawWrite(Context context) {
super(context);
this.context=context;
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
invalidate();
paint.setAntiAlias(true);
if (DrawWriteActivity.clearScreen){
mPath.reset();
DrawWriteActivity.clearScreen = false;
}
cleanButton(canvas);
try {
getDrawnMessage(canvas);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
paint.setColor(Color.parseColor(DrawWriteActivity.colorProvider));
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(DrawWriteActivity.strokeProvider);
if (moveD == true) {
x1 = TouchXD;
y1 = TouchYD;
moveD = false;
} else if (Move == true) {
x2 = TouchXD;
y2 = TouchYD;
mPath.moveTo(x1, y1);
mPath.lineTo(x2, y2);
canvas.drawPath(mPath, paint);
x1 = x2;
y1 = y2;
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
TouchXD = (float) event.getX();
TouchYD = (float) event.getY();
moveD = true;
break;
case MotionEvent.ACTION_UP:
TouchXU = (float) event.getX();
TouchYU = (float) event.getY();
moveU = true;
break;
case MotionEvent.ACTION_MOVE:
TouchXD = (float) event.getX();
TouchYD = (float) event.getY();
Move = true;
break;
}
return true;
}
public void getDrawnMessage(Canvas canvas) throws FileNotFoundException{
if(exp){
Bitmap bitmap = null;
String root = Environment.getExternalStorageDirectory().toString();
File imgDir = new File(root+"/ChitBak/");
String imgName;
bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Config.ARGB_8888);
imgDir.mkdirs();
imgName = "img"+i+".jpg";
i++;
File file = new File(imgDir,imgName);
if(file.exists()) file.delete();
FileOutputStream outImg = new FileOutputStream(file);
bitmap.compress(CompressFormat.JPEG, 100, outImg);
exp = false;
Intent in = new Intent(context, MainActivity.class);
in.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
context.startActivity(in);
}
}
private void cleanButton(Canvas canvas) {
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.DKGRAY);
canvas.drawRoundRect(new RectF(getWidth() - 100, getHeight() - 70,
getWidth() - 20, getHeight() - 20), 10, 10, paint);
paint.setColor(Color.LTGRAY);
paint.setTextSize(27);
paint.setTextSkewX((float) 0.2);
canvas.drawText("Save", getWidth() - 92, getHeight() - 35, paint);
}
private void isResetRequested() {
if (TouchXD >= (getWidth() - 100) && TouchYD >= getHeight() - 70
&& TouchXD <= (getWidth() - 20) && TouchYD <= getHeight() - 20){
exp = true;
}
}
}
請幫助我的朋友,因爲我不知道如何解決這個問題。
在此先感謝。
如果你想要代碼中的任何東西,然後告訴我,我會提供它。
嗨! getDrawnMessage中的位圖始終爲空。我的意思是大小是正確的,但你不使用你的畫布,你通過這種方法! – Dima 2014-12-04 16:16:06