如何序列android.graphics.Path的对象 [英] how to serialize an object of android.graphics.Path
问题描述
我想保存在内部设备内存Android.graphics.Path的对象。有谁知道如何序列化android.graphics.Path对象?而且,有没有存储路径对象的任何其他方式?谢谢。
I'm trying to store objects of Android.graphics.Path in internal device memory. Does anyone know how to serialize a android.graphics.Path object? And also, is there any other way of storing a Path object? Thanks.
推荐答案
我做的方式是确定,我需要从原来的Path类,然后简单地覆盖这些方法的方法如下:
The way I did it is to identify the methods that I needed from the original Path class and then simply override those methods as follows:
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;
}
}
}
在我的例子中,我需要的moveTo和的lineTo,所以在这种情况下,我只是拿在列表中的图纸信息。此列表中包含的描绘信息(我称之为行动),以恢复绘图,因为它看起来就像物体序列化之前需要路径。然后,当我反序列化类型CustomPath我的目标我做到让默认的序列化协议称之为drawThisPath ,因此该路径被重新绘制。
In my example I need "moveTo" and "lineTo", so in this case I simply hold the drawing information in a list. This list contains the drawing information (what I call "action") needed by Path in order to restore the drawing as it looked like before the object was serialized. Then when I deserialize my objects of type CustomPath i make sure to let the default serialization protocol call "drawThisPath", so the path is redrawn.
这篇关于如何序列android.graphics.Path的对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!