2017-01-03 6 views
3

Когда изображение было нажато, я хочу отобразить изображение в полноэкранном режиме. Впервые он работает, но после этого он разбился. И ошибка указывает наImageView разбил приложение

startActivity(intent); 

Код

Intent intent = new Intent(AddExpenses.this,FullScreenImage.class); 
imageView.buildDrawingCache(); 
Bitmap image= imageView.getDrawingCache(); 
Bundle extras = new Bundle(); 
extras.putParcelable("imagebitmap", image); 
intent.putExtras(extras); 
startActivity(intent); 
image.recycle(); 

FullScreenImage

public class FullScreenImage extends Activity { 

    @SuppressLint("NewApi") 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.layout_full); 
     Bundle extras = getIntent().getExtras(); 
     Bitmap bmp = (Bitmap) extras.getParcelable("imagebitmap"); 
     ImageView imgDisplay; 
     Button btnClose; 

     imgDisplay = (ImageView) findViewById(R.id.imgDisplay); 
     btnClose = (Button) findViewById(R.id.btnClose); 
     btnClose.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       FullScreenImage.this.finish(); 
      } 
     }); 
     imgDisplay.setImageBitmap(bmp); 
    } 
} 

Logcat

E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.IllegalStateException: Can't parcel a recycled bitmap 
      at android.graphics.Bitmap.checkRecycled(Bitmap.java:256) 
      at android.graphics.Bitmap.writeToParcel(Bitmap.java:1366) 
      at android.os.Parcel.writeParcelable(Parcel.java:1254) 
      at android.os.Parcel.writeValue(Parcel.java:1173) 

Я использую extras.putParcelable("imagebitmap",image.copy(image.getConfig(), true)); но получить новую ошибку

java.lang.IllegalStateException: Can't copy a recycled bitmap 
      at android.graphics.Bitmap.checkRecycled(Bitmap.java:256) 
      at android.graphics.Bitmap.copy(Bitmap.java:454) 
      at com.example.tony.monthlyexpenses.AddExpenses$4.onClick(AddExpenses.java:176) 
+0

Удалить 'image.recycle();' строка, а затем проверить –

+0

@ ρяσѕρєяK Это не сбой, если я удалю строку, но она вернет предыдущее изображение, а не новое. FYI, я загружаю изображение галереи в imageView. –

+0

Почему бы не просто передать URI изображения на следующий экран, а не передать большой объект растрового изображения, который вызовет проблему с памятью в любое время. –

ответ

0

Я думаю, что проблема в том, что serilization делается после того, как намерение обжигают. Таким образом, вместо растрового изображения, просто поместите копию Bitmap на Намерения, как это:

extras.putParcelable("imagebitmap",image.copy(image.getConfig(), true)); 
intent.putExtras(extras); 

Проверьте, если это устраняет проблему.

+0

Я получаю это 'java.lang.IllegalStateException: Can not копировать переработанную битовую карту' –

+0

Дать 'image.recycle();' некоторую задержку. –

+0

Как задержать его? –