我创建了一个使用 SPenSdk 库的应用程序,我的应用程序很简单,我所做的是在应用程序开始时canvasView
用笔、橡皮擦、撤消和重做选项打开一个。
我有两个按钮,一个将画布保存为 SD 卡中的图像,另一个按钮用于加载保存的图像。
现在我的问题是,每当我加载保存的图像并编辑保存的图像并再次保存图像时,它都会保存为新图像而不是更新保存的图像,为什么会这样?
我把我的代码放在这里。如果可能,请举个例子帮助我解决这个问题。
java文件的代码
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();
}
};
}