2012-12-13 37 views
2

我的代碼工作正常,直到表或設備旋轉。旋轉時,繪圖被清除,我知道這發生了,因爲當設備旋轉時,活動重新啓動。 我的問題是如何重新繪製並將數據保存到onSaveInstanceState。 許多人說,我必須使用onSaveInstanceState來保存繪圖,但我不知道如何去做,當我必須保存的數據類型是路徑。如何在方向更改後在畫布中重繪圖形

這裏是我的代碼

public class MyDrawView extends View implements OnTouchListener { 
    MyDrawView drawView; 
    float prevX = 0; 
    float prevY = 0; 

    private Bitmap mBitmap; 
    private Canvas mCanvas; 
    private Path mPath; 
    private Paint mBitmapPaint; 
    private Paint mPaint; 
    private int w,h; 
    private ArrayList<Path> paths = new ArrayList<Path>(); 
    private ArrayList<Paint> bitPaints = new ArrayList<Paint>(); 
    private ArrayList<Paint> pathPaints = new ArrayList<Paint>(); 
    Paint tempPaint; 
    private String filename=""; 

    public MyDrawView(Context c,String filename) { 
     super(c); 
     mPath = new Path(); 
     mBitmapPaint = new Paint(Paint.DITHER_FLAG); 


     this.filename=filename; 
     setFocusable(true); 
     setFocusableInTouchMode(true); 
     this.setOnTouchListener(this); 
     mPaint = new Paint(); 
     mPaint.setAntiAlias(true); 
     mPaint.setDither(true); 
     mPaint.setColor(Color.RED); 
     mPaint.setStyle(Paint.Style.STROKE); 
     mPaint.setStrokeJoin(Paint.Join.ROUND); 
     mPaint.setStrokeCap(Paint.Cap.ROUND); 
     mPaint.setStrokeWidth(6); 
     tempPaint=new Paint(mPaint); 
     mCanvas = new Canvas(); 
     mPath = new Path(); 
     if (rotated){ 
      setDefaultDrawing(); 
     } 

    } 
    public void setDefaultDrawing() 
    { 

    } 
    public Bitmap getBitmap(){ 
     return this.mBitmap; 
    } 
    public void setStrokeWidth(float width){ 
     mPaint.setStrokeWidth(width); 
    } 
    public void setColor(int color){ 
     mPaint.setColor(color); 
    } 
    public String getFileName(){ 
     return this.filename; 
    } 
    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
     this.w=w; 
     this.h=h; 
     mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
     mCanvas = new Canvas(mBitmap); 
     Path tempPath=new Path(mPath); 
     paths.add(tempPath); 
     Paint tempPaint=new Paint(mPaint); 
     pathPaints.add(tempPaint); 
     Paint tempBitPaint=new Paint(mBitmapPaint); 
     bitPaints.add(tempBitPaint); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 

     canvas.drawPath(mPath, mPaint); 
    } 
+0

更好的修復清單中的方向...使用任意一幅肖像拍攝土地景觀 – Pragnani

+0

我希望我能夠輕鬆地做到我的負擔,但我必須使它靈活:(必須使它在縱向和橫向上均可工作 –

回答

0

我琢磨出來的片斷,因爲Path是一個自定義對象,我創建了一個類的對象,將持有的路徑,這樣一來,我可以只保存我的onSaveInstanceState類對象並使用相同的類對象檢索它。

+0

如果你還記得這個,請詳細說明 – hypd09

+2

如果你有解決方案,你應該提供更多的細節來幫助別人,你不可能只是創建一個對象而不把對象設爲Parcelable。 – pixel