我尝试更改ImageView
的背景,但由于OutOfMemoryError
而导致错误。
我已使用Bitmap
搜索更改背景,但我不知道如何使用它。
当我点击按钮时,背景将变为另一张图片。
代码如下:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.user_guide, container, false) ;
last = (Button) view.findViewById(R.id.last);
user = (ImageView) view.findViewById(R.id.image);
last.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
user.setBackgroundResource(R.drawable.test1);
}
});
我搜索了以下代码,但我不知道如何使用它来更改background
的{{1}}。
有人可以教我如何使用它吗?
Imageview
有人可以教我如何使用它来更改public static Bitmap readBitMap(Context context, int resId){
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
InputStream is = context.getResources().openRawResource(resId);
return BitmapFactory.decodeStream(is,null,opt);
}
和ImageView
的背景吗?
提前致谢。
答案 0 :(得分:1)
尝试以下代码:
last.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Bitmap bitmap=readBitmap(this, R.drawable.test1);
image.setImageBitmap(bitmap);
bitmap.recycle();
bitmap=null;
}
});
使用您的方法:
public static Bitmap readBitMap(Context context, int resId){
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
InputStream is = context.getResources().openRawResource(resId);
return BitmapFactory.decodeStream(is,null,opt);
}
答案 1 :(得分:0)
使用这两种方法有效地加载位图..... for efficient large bitmap loading
last.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
WeakReference bitmapWeakReference=new WeakReference(decodeSampledBitmapFromResource(getApplicationContext().getRssource(),drawableId,reqWidth,reqHeight));
user.setImageBitmap(bitmapWeakReference.get());
}
});
public static int calculateInSampleSize(
BitmapFactory.Options options, int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height / 2;
final int halfWidth = width / 2;
while ((halfHeight / inSampleSize) > reqHeight
&& (halfWidth / inSampleSize) > reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
int reqWidth, int reqHeight) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
}