2013-09-18 4 views
0

Я довольно новичок в платформе Android, и я переопределил метод onDraw CustomView с помощью canvas.drawPath(path, paint), чтобы создавать чертежи на странице.Android Сохранение/Отображение рисованных изображений In View

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

Мне было интересно, как справиться с этим сценарием. Я читаю сообщения о SO о сохранении чертежа в виде растрового изображения и его последующем восстановлении. Поэтому я использовал Convert view to bitmap on Android

public static Bitmap getBitmapFromView(View view) { ... 

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

Bitmap map = getBitmapFromView(cView); 
Canvas canvas = new Canvas(map); 

и приложил этот холст к статическому списку объектов Canvas.

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

RelativeLayout layout = (RelativeLayout) findViewById(R.id.activity_display); 
for (int x=0; x < canvasList.size(); x++) { 
    Canvas currCanvas = canvasList.get(x) 
    View view = new View(this); 
    view.draw(currCanvas); 
    layout.addView(canvasList.get(x)); 
} 

Существует определенно что-то не так с моим подходом, но мне не удалось идентифицировать.

ответ

1

Итак, вы попытались отобразить битмапRecieved в getBitmapFromView, чтобы убедиться, что он работает?

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

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

1

Попробуйте использовать Bundle savedInstance. Вместо того чтобы использовать canvasList, я буду использовать массив растровых изображений:

@Override 
    protected void onSaveInstanceState(Bundle state) { 
     super.onSaveInstanceState(state); 
     state.putSerializable("starttime", startTime); 
     for(int i=0; i<bmp.size; i++){ 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bmp[i].compress(Bitmap.CompressFormat.PNG, 100, stream); 
     byte[] byteArray = stream.toByteArray(); 
     state.putByteArray("img"+i, byte[] value); 

    } 

@Override 
protected void onCreate(Bundle bundle) { 
    super.onCreate(bundle); 

    if ((bundle != null) 
      for(int i=0; bundle.getByteArray("img"+i) != null; i++) { 
        //Load byteArray back to bitmap array 
      } 
} 

Я не проверял код, так что могут быть некоторые проблемы. Существует много способов добиться того, чего вы хотите, вы также можете сэкономить на рисовании или сохранить как изображение на клиенте пользователя.

Удачи, дайте мне знать, если это сработает!

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