Мне только что удалось это решить. Мое приложение основано на FingerPaintDemo, поэтому использует только moveTo и quadTo, но я думаю, что вы можете применить этот подход к любым функциям Path.
Сначала расширьте Path следующим образом:
import android.graphics.Path;
import java.util.ArrayList;
import java.io.Serializable;
public class SerializablePath extends Path implements Serializable {
private ArrayList<float[]> pathPoints;
public SerializablePath() {
super();
pathPoints = new ArrayList<float[]>();
}
public SerializablePath(SerializablePath p) {
super(p);
pathPoints = p.pathPoints;
}
public void addPathPoints(float[] points) {
this.pathPoints.add(points);
}
public void loadPathPointsAsQuadTo() {
float[] initPoints = pathPoints.remove(0);
this.moveTo(initPoints[0], initPoints[1]);
for (float[] pointSet : pathPoints) {
this.quadTo(pointSet[0], pointSet[1], pointSet[2], pointSet[3]);
}
}
}
Не думаю, что мне нужно вставлять код реализации, но если вы хотите увидеть его, дайте мне знать. По сути, так же, как вы вызываете что-то вроде myPath.quadTo (x1, y1, x2, y2), также вызываете myPath.addPathPoints (new float [] {x1, y1, x2, y2}).
Сериализует объект на диск как обычно, и когда вы читаете его обратно, просто вызовите myPath.loadPathPointsAsQuadTo ().