2012-08-09 91 views
0

private Path mPath = new Path();的Android,保存路徑數據庫

我想保存路徑(mPath),以數據庫爲未來的讀取和重繪。

有沒有辦法將路徑分隔到x,y然後收集到Path或其他方法?

感謝

回答

5

讓序列化的自定義路徑類和保存到數據庫

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

    } 
} 
+0

更美麗變種這裏http://pastebin.com/CtJ5ibA7 – danik 2015-08-27 13:14:31