我使用此代码来序列化android.graphics.Path。 但是当我将Path保存到文件然后获取表单文件时,路径PathAction为空,我无法重绘路径。
如何在文件中保存android.graphics.Path然后获取并重绘?
public class CustomPath extends Path implements Serializable {
private static final long serialVersionUID = -5974912367682897467L;
private ArrayList<PathAction> actions = new ArrayList<CustomPath.PathAction>();
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
in.defaultReadObject();
drawThisPath();
}
@Override
public void moveTo(float x, float y) {
actions.add(new ActionMove(x, y));
super.moveTo(x, y);
}
@Override
public void lineTo(float x, float y){
actions.add(new ActionLine(x, y));
super.lineTo(x, y);
}
private void drawThisPath(){
for(PathAction p : actions){
if(p.getType().equals(PathActionType.MOVE_TO)){
super.moveTo(p.getX(), p.getY());
} else if(p.getType().equals(PathActionType.LINE_TO)){
super.lineTo(p.getX(), p.getY());
}
}
}
public interface PathAction {
public enum PathActionType {LINE_TO,MOVE_TO};
public PathActionType getType();
public float getX();
public float getY();
}
public class ActionMove implements PathAction, Serializable{
private static final long serialVersionUID = -7198142191254133295L;
private float x,y;
public ActionMove(float x, float y){
this.x = x;
this.y = y;
}
@Override
public PathActionType getType() {
return PathActionType.MOVE_TO;
}
@Override
public float getX() {
return x;
}
@Override
public float getY() {
return y;
}
}
public class ActionLine implements PathAction, Serializable{
private static final long serialVersionUID = 8307137961494172589L;
private float x,y;
public ActionLine(float x, float y){
this.x = x;
this.y = y;
}
@Override
public PathActionType getType() {
return PathActionType.LINE_TO;
}
@Override
public float getX() {
return x;
}
@Override
public float getY() {
return y;
}
}
}
这是保存并从文件中获取
public static <T> void saveObjectToFile(Context pContext, T object, final String pFileName) {
try {
FileOutputStream fos = pContext.openFileOutput(pFileName, Context.MODE_PRIVATE);
ObjectOutputStream of = new ObjectOutputStream(fos);
of.writeObject(object);
of.flush();
of.close();
fos.close();
} catch (Exception e) {
Log.e("InternalStorage", e.getMessage());
}
}
public static <T> T getObjectFromFile(Context pContext, final String pFileName) {
T toReturn = null;
FileInputStream fis;
try {
fis = pContext.openFileInput(pFileName);
ObjectInputStream oi = new ObjectInputStream(fis);
toReturn = (T) oi.readObject();
oi.close();
} catch (FileNotFoundException e) {
Log.e("InternalStorage", e.getMessage());
} catch (IOException e) {
Log.e("InternalStorage", e.getMessage());
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return toReturn;
}