我有一个带有ImageView的简单片段,用户可以将pic令牌设置为其背景。 但只要那里没有照片。默认的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与第一个相同。
现在我的片段代码。
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);
}
现在问题出现在我每次都得到这个问题之后 exceprion
IllegalArgumentException: Cannot draw recycled bitmaps
我知道只要没有,就没有必要回收位图 参考。
但我想了解这里的错误。正如我从这里的不同问题和调用回收并将位图设置为null后的android文档所理解的 正如我在&#34; cleanImageView &#34;一切都应该没问题!所以重新创建活动&#34; onStart &#34;将被调用并且在&#34; showPhoto &#34;一个新的参考 将创建PNG资源并将其传递给imageview !!!!
我在这里做错了什么???
thx
答案 0 :(得分:1)
最后我找到了解决问题的方法..
自
// 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));
知道加载的位图每次都有不同的地址...... 我知道每次加载相同的图像并不好。 但在这里我只是想了解导致非法感染的原因