2012-01-02 4 views
1

Я создаю приложение, которое использует холст и чертежи Android.Сохранение чертежа

Каков наилучший способ сохранить чертеж для последующей модификации? Скажите, что у него есть строки и значки, которые я хочу, чтобы пользователь мог сохранять и все еще иметь возможность изменять каждый компонент чертежа позже.

Я знаю, что могу сохранить чертеж как .png или .jpg, но потом его нельзя отредактировать позже. Я нашел способ рендерить SVG-файлы в Canvas, но не наоборот.

ответ

0

Вам нужно будет хранить каждое действие, которое вы вызываете на холсте, каким-то образом, поскольку я не знаю, как их восстановить, как только они были применены к холсту.

Возможно, путем расширения класса Canvas и переопределения каждой функции для хранения действия в файле или базе данных, а затем для запуска метода суперкласса?

1

Вам нужно сохранить список примитивов, которые вы рисуете, так как на холсте используется только битмап. Кроме того, вам нужно сохранить z-index, который определяет, в каком порядке они появляются, чтобы пользователь мог переупорядочить элементы.

На самом деле может быть проще определить новый класс EditableShape, который содержит элементы управления (т. Е. Конечные точки для линии, центра и двух осей для эллипса), которые могут быть записаны в файл.

Для изображений вам, вероятно, необходимо сохранить копию изображения с уникальным идентификатором, а не только адресом, в случае удаления оригинала.

+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

ОК. Это полезно в целом, но он все еще не ответил на мой вопрос :) – KcYxA

Смежные вопросы