java - 非法参数异常 : Cannot draw recycled bitmaps by recreatign activity

标签 java android bitmap

我有一个带有 ImageView 的简单 fragment ,用户的图片标记可以设置为其背景。 但只要那里没有照片。默认 PNG 将作为 ImageView 的背景。

有两个 XML 文件,一个用于纵向,一个用于横向。

<小时/>

portrait_fragment.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="match_parent">

        <ImageView
            android:layout_width="80dip"
            android:layout_height="80dip"
            android:id="@+id/crime_imageView"
            android:scaleType="centerCrop"
            android:focusableInTouchMode="false"
            android:cropToPadding="true"
            android:adjustViewBounds="true"
            android:src="@drawable/ic_menu_gallery" />

    </LinearLayout>
<小时/>

landscape_fragment.xml 与纵向 1 相同。

<小时/>

现在我的 fragment 代码。

imageview_fragment.java

public class CrimeFragment extends Fragment {

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

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup parent,
                         Bundle savedInstanceState) {
       View v = inflater.inflate(R.layout.fragment_crime, parent, false);
       ...
      ...
   }

   @Override
   public void onStart() {
      super.onStart();
      showPhoto();
   }

   @Override
   public void onStop() {
      super.onStop();
      cleanImageView(mImageView);
   }

   private void showPhoto() {

      // (Re)set the image button's image based on our photo
      Photo photo = mCrime.getPhoto();

      // get the default background of imageview 
      BitmapDrawable bitmapDrawable =
            (BitmapDrawable) getResources().getDrawable(R.drawable.ic_menu_gallery);

      // if we got any user related pic set it as imageviewsbackground
      if (photo != null) {
          String path =         
              getActivity().getFileStreamPath(photo.getFilename()).getAbsolutePath();
          bitmapDrawable = PictureUtils.getScaledDrawable(getActivity(), path);
      }

      mImageView.setImageDrawable(bitmapDrawable);
 }

public void cleanImageView(ImageView imageView) {
    if (!(imageView.getDrawable() instanceof BitmapDrawable))
        return;

    // clean up the view's image for the sake of memory
    BitmapDrawable bitmapDrawable = (BitmapDrawable) imageView.getDrawable();
    bitmapDrawable.getBitmap().recycle();
    imageView.setImageDrawable(null);
 }
<小时/>

现在的问题是在改变我每次得到的方向之后 异常

IllegalArgumentException: Cannot draw recycled bitmaps

我知道其实没有必要回收位图,只要没有 引用一下。

但是我想了解这里出了什么问题。正如我从这里的不同问题和调用回收并将位图设置为空后的android文档中了解到的那样 正如我在“cleanImageView”中所做的那样,一切都应该没问题!因此,在重新创建 Activity 后,将调用“onStart”,并在“showPhoto”中添加对 PNG资源将被创建并传递到 ImageView !!!!

我在这里做错了什么???

谢谢

最佳答案

终于找到解决办法了..

    // get the default background of imageview 
    BitmapDrawable bitmapDrawable =
        (BitmapDrawable) getResources().getDrawable(R.drawable.ic_menu_gallery);

拒绝加载同一图像两次。 您必须强制它执行以下操作:

BitmapDrawable bitmapDrawable =
            new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.ic_menu_gallery));

知道加载的位图每次都有不同的地址... 我知道每次加载相同的图像并不好。 但在这里我只是想了解是什么导致了非法异常

关于java - 非法参数异常 : Cannot draw recycled bitmaps by recreatign activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27735777/

相关文章:

java - IBM-Worklight : Failed starting project

java - JOGL/OPENGL 中的大型线带管理...?

android - 如何获取常量文件中字符串资源的值?

java - 仅当不直接扩展 RecyclerView 时才会出现 InflateException

android - 降低 Android 电池消耗

java - jetty continuation - 暂停的请求 - 资源

java - JAVA中提取一部分JSON对象

android - 位图转换为 webp 给出信号 11

c# - 如何防止 richTextBox 在其中粘贴图像?

android - 为什么保存已加载的位图会增加其大小?