I have created an app in which I have used SPenSdk libraries, My app is simple, What I do is on the start of the app I open a canvasView with a pen, eraser, undo and redo option.
I have two buttons, one save the canvas as an image in my SD card and another button is used to load the saved images.
Now my issue is, whenever I load the saved image and edit the saved images and again save the images, it is saved as new images instead of updating the saved images, why it happens?
I put my code here. Help me to solve this out, if possible with an example.
Code For java File
public class CanvasActivity extends Activity {
private CanvasView m_CanvasView;
private SettingView m_SettingView;
private Button m_PenButton, m_EraserButton, m_UndoButton, m_RedoButton, m_SaveButton;
private int mButtonTextNormalColor;
public static final String DEFAULT_APP_IMAGEDATA_DIRECTORY = "/mnt/sdcard/SmemoExample";
private File m_Folder = null;
public static final String SAVED_FILE_EXTENSION = "png";
public static final String EXTRA_IMAGE_PATH = "path";
public static final String EXTRA_IMAGE_NAME = "filename";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
m_PenButton = (Button) findViewById(R.id.pen_button);
m_PenButton.setOnClickListener(mBtnClickListener);
mButtonTextNormalColor = m_PenButton.getTextColors().getDefaultColor();
m_EraserButton = (Button) findViewById(R.id.erase_button);
m_EraserButton.setOnClickListener(mBtnClickListener);
m_UndoButton = (Button) findViewById(R.id.undo_button);
m_UndoButton.setOnClickListener(undoNredoBtnClickListener);
m_UndoButton.setEnabled(false);
m_RedoButton = (Button) findViewById(R.id.redo_button);
m_RedoButton.setOnClickListener(undoNredoBtnClickListener);
m_RedoButton.setEnabled(false);
m_SaveButton = (Button) findViewById(R.id.save_button);
m_SaveButton.setOnClickListener(mBtnClickListener);
m_CanvasView = (CanvasView) findViewById(R.id.canvas_view);
m_SettingView = (SettingView) findViewById(R.id.setting_view);
m_CanvasView.setSettingView(m_SettingView);
m_CanvasView.setOnHistoryChangeListener(historyChangeListener);
m_CanvasView.setInitializeFinishListener(mInitializeFinishListener);
m_Folder = new File(DEFAULT_APP_IMAGEDATA_DIRECTORY);
String mFileName = getIntent().getStringExtra(EXTRA_IMAGE_NAME);
loadCanvas(mFileName);
}
private OnClickListener undoNredoBtnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (v == m_UndoButton) {
m_CanvasView.undo();
} else if (v == m_RedoButton) {
m_CanvasView.redo();
}
m_UndoButton.setEnabled(m_CanvasView.isUndoable());
m_RedoButton.setEnabled(m_CanvasView.isRedoable());
}
};
OnClickListener mBtnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == m_PenButton.getId()) {
m_CanvasView.changeModeTo(CanvasView.PEN_MODE);
m_PenButton.setSelected(true);
m_PenButton.setTextColor(Color.WHITE);
m_EraserButton.setSelected(false);
m_EraserButton.setTextColor(mButtonTextNormalColor);
if (m_PenButton.isSelected()) {
m_SettingView.showView(AbstractSettingView.PEN_SETTING_VIEW);
}
} else if (v.getId() == m_EraserButton.getId()) {
m_CanvasView.changeModeTo(CanvasView.ERASER_MODE);
m_EraserButton.setSelected(true);
m_EraserButton.setTextColor(Color.WHITE);
m_PenButton.setSelected(false);
m_PenButton.setTextColor(mButtonTextNormalColor);
if (m_EraserButton.isSelected()) {
m_SettingView.showView(AbstractSettingView.ERASER_SETTING_VIEW);
}
} else if(v.getId() == m_SaveButton.getId()) {
saveCanvas();
}
}
};
public boolean saveCanvas() {
byte[] buffer = m_CanvasView.getData();
if (buffer == null)
return false;
if (!(m_Folder.exists()))
m_Folder.mkdirs();
String savePath = m_Folder.getPath() + '/' + UtilitiesActivity.getUniqueFilename(m_Folder, "image", SAVED_FILE_EXTENSION);
if (UtilitiesActivity.writeBytedata(savePath, buffer))
return true;
else
return false;
}
public boolean loadCanvas(String fileName) {
String loadPath = m_Folder.getPath() + '/' + fileName;
byte[] buffer = UtilitiesActivity.readBytedata(loadPath);
if (buffer == null)
return false;
m_CanvasView.setData(buffer);
return true;
}
private CanvasView.OnHistoryChangeListener historyChangeListener = new CanvasView.OnHistoryChangeListener() {
@Override
public void onHistoryChanged(boolean bUndoable, boolean bRedoable) {
m_UndoButton.setEnabled(bUndoable);
m_RedoButton.setEnabled(bRedoable);
}
};
CanvasView.InitializeFinishListener mInitializeFinishListener = new CanvasView.InitializeFinishListener() {
@Override
public void onFinish() {
Bitmap bg = BitmapFactory.decodeResource(getResources(), R.drawable.canvas_bg);
m_CanvasView.setBackgroundImage(bg);
bg.recycle();
}
};
}
While you save an image, it takes a new name and save that. Old image wont be overwritten. So you can edit the save canvas function. The method shown below
function “getUniqueFilename” generates a new name.So if you update an image, just avoid the function
and save with old name. Then it will be overwritten.