Cómo serializar un objeto de android.graphics.Path

Estoy tratando de almacenar objetos de Android.graphics.Path en la memoria interna del dispositivo. ¿Alguien sabe cómo serializar un objeto android.graphics.Path? Y también, ¿hay alguna otra forma de almacenar un objeto Path? Gracias.

La forma en que lo hice es identificar los métodos que necesitaba de la clase Path original y luego simplemente anular los métodos de la siguiente manera:

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; } } } 

En mi ejemplo necesito "moveTo" y "lineTo", por lo que en este caso simplemente mantengo la información de dibujo en una lista. Esta lista contiene la información de dibujo (lo que yo llamo "acción") que necesita Path para restaurar el dibujo tal como parecía antes de serializar el objeto. Entonces, cuando deserialice mis objetos de tipo CustomPath, asegúrese de dejar que el protocolo de serialización predeterminado llame a "drawThisPath", para que la ruta se vuelva a dibujar.

Acabo de solucionar esto. Mi aplicación se basa en el FingerPaintDemo, por lo que hace uso de sólo moveTo y quadTo, pero creo que se puede aplicar este enfoque a cualquier función Path.

Primero, extienda Path de la siguiente manera:

 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]); } } } 

No creo que necesite pegar el código de implementación, pero si quieres verlo, házmelo saber. Básicamente, al igual que llamar a algo como myPath.quadTo (x1, y1, x2, y2), también llamar a myPath.addPathPoints (new float [] {x1, y1, x2, y2}).

Serialice el objeto al disco como de costumbre, y cuando lo vuelve a leer, asegúrese de llamar a myPath.loadPathPointsAsQuadTo ().

No hay nada tan especial para la clase Path. Use puede serializar cualquier clase que implemente la interfaz Serializable.

Interfaz Serializable es una interfaz de Marcador. Es decir, no tienen ningún método para implementar. Sólo significa que el objeto puede ser deflatted a los archivos / Memroies y más tarde puede ser inflado para ser un objeto vivo de nuevo

Lo que haces es crear una clase que amplíe tu clase android.graphics.Path e implementa la interfaz Serializable. A continuación, utilice esta clase en lugar de su android.graphics.Path. A continuación, podrá aplicar la serialización sobre ella.

Y compruebe el siguiente enlace para obtener una información detallada

http://java.sun.com/developer/technicalArticles/Programming/serialization/

Espero que esto ayude 🙂

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.