我有一个带有 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/