2012-01-02 12 views
1

私はAndroidのキャンバスとDrawablesを使用するアプリケーションを構築しています。図面を保存

後で修正するために図面を保存する最も良い方法は何ですか?ユーザーが保存して、後で図面の各コンポーネントを変更できるようにする線とアイコンがあるとします。

図面を.pngまたは.jpgとして保存できますが、後で編集することはできません。 SVGファイルをCanvasにレンダリングする方法を見つけましたが、それ以外の方法はありません。

答えて

0

私が知っているキャンバスに適用されていれば、それを取得する方法がないので、あなたが呼び出した各アクションをキャンバスに保存する必要があります。

おそらくCanvasクラスを拡張し、各関数をオーバーライドしてファイルまたはデータベースにアクションを格納し、スーパークラスのメソッドを実行しますか?

1

描画するプリミティブのリストを保存する必要があります。カンバスはビットマップを使用するだけなので、描画するプリミティブのリストを保存する必要があります。さらに、ユーザーが要素を並べ替えることができるようにするためには、表示順序を決定するz-インデックスを格納する必要があります。

実際には、ファイルに書き込むことができるコントロール(つまり、楕円の線、中央、2軸の端点)を保持する新しいEditableShapeクラスを定義する方が簡単かもしれません。

イメージの場合、元のイメージを削除する場合に備えて、アドレスの代わりに固有のIDを付けてイメージのコピーを保存する必要があります。

+0

基本的にIllustratorのようなベクトルグラフィックス機能を簡単に実現する方法はありませんか? – KcYxA

1

保存した後で編集可能な場合は保存し直してください。確認してください。あなただけの描画図面やキャンバスを保存したい場合は

しかし、その後、これを試してみてください。

@Override 
       public void onClick(View v) { 
        final Activity currentActivity = YourActivity.this; 
        Handler saveHandler = new Handler(){ 
         @Override 
         public void handleMessage(Message msg) { 
          final AlertDialog alertDialog = new AlertDialog.Builder(currentActivity).create(); 
          alertDialog.setTitle("Your Title"); 
          alertDialog.setMessage("Your drawing is saved to Gallery."); 
          alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int which) { 
            return; 
           } 
          }); 
          alertDialog.show(); 
         } 
        } ; 
        new ExportBitmapToFileToSaveInGallery(TWSBIDrawMainActivity.this,saveHandler, bm).execute(); 







// to Saw progressBar and also the dialog box that gives confirmation to user. 
public static class ExportBitmapToFileToSaveInGallery extends AsyncTask<Intent,Void,Boolean> { 
    private Context mContext; 
    private Handler mHandler; 
    private Bitmap nBitmap; 
    private ProgressDialog m_progressDialog = null; 
    @Override  
    protected void onPreExecute(){   
     m_progressDialog = new ProgressDialog(mContext); 
     m_progressDialog.setTitle("Draw"); 
     m_progressDialog.setMessage("Please wait..."); 
     m_progressDialog.setCancelable(false);   
     m_progressDialog.show();  
    } 

    public ExportBitmapToFileToSaveInGallery(Context context,Handler handler,Bitmap bitmap) { 
     mContext = context; 
     nBitmap = bitmap; 
     mHandler = handler; 
    } 

    @Override 
    protected Boolean doInBackground(Intent... arg0) { 
     try { 
      if (!APP_FILE_PATH.exists()) { 
       APP_FILE_PATH.mkdirs(); 
      } 

      final FileOutputStream out = new FileOutputStream(new File(APP_FILE_PATH + "/"+timeStampFormat.format(new Date())+".jpg")); 
      nBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 

      out.flush(); 
      out.close(); 

      return true; 
     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
     //mHandler.post(completeRunnable); 
     return false; 
    } 

    @Override 
    protected void onPostExecute(Boolean bool) { 
     super.onPostExecute(bool); 
     if (bool){ 
      mHandler.sendEmptyMessage(1); 
     } 
     if (m_progressDialog.isShowing()) {    
      m_progressDialog.dismiss();   
     } 

    } 
} 

これは、あなたはまた、いくつかの図面を追加することができます保存したら、あなたのキャンバスが希望メートに描画して保存しますあなたが望むように。 ほんの少し助けてくれることを願っています。

ありがとうございました。

+0

ありがとうございます。私はまだ画像/すべてのオブジェクトが保存された後に線、四角などのオブジェクトを操作することができる必要があります。 – KcYxA

+0

私の答えがあなたを助けるならば、あなたはそれをアップヴォートするか受け入れることができますので、他の人に役立つことができます。ありがとう。 –

+0

OK。それは一般的には便利ですが、それでも私の質問には答えませんでした:) – KcYxA