SPenSdk ライブラリを使用したアプリを作成しました。私のアプリはシンプルです。アプリの開始時にcanvasView
、ペン、消しゴム、元に戻す、やり直しオプションで開きます。
2 つのボタンがあります。1 つはキャンバスをイメージとして SD カードに保存し、もう 1 つは保存したイメージをロードするために使用します。
今私の問題は、保存された画像を読み込んで保存された画像を編集し、再度画像を保存すると、保存された画像を更新するのではなく、新しい画像として保存されるのはなぜですか?
ここにコードを配置します。可能であれば、例を挙げてこれを解決するのを手伝ってください。
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();
}
};
}