如何检查 ImageView 是不是包含位图?
Posted
技术标签:
【中文标题】如何检查 ImageView 是不是包含位图?【英文标题】:How to check if ImageView contains Bitmap or not?如何检查 ImageView 是否包含位图? 【发布时间】:2013-12-17 21:50:53 【问题描述】:我正在实现如果ImageView
有位图,那么它应该将图像从 imageview 保存到内部存储器,否则在应用程序的内部存储器中设置另一个位图。
这是代码:_
croppedImage = cropImageView.getCroppedImage();
croppedImageView = (ImageView) findViewById(R.id.croppedImageView);
croppedImageView.setImageBitmap(croppedImage);@Override
public void onClick(View v)
// TODO Auto-generated method stub
switch (v.getId())
case R.id.btn_save:
counter++;
if(croppedImageView.getDrawable() != null)
System.out.println("nullllllllllllll");
try
Bitmap photo = ((BitmapDrawable)croppedImageView.getDrawable()).getBitmap();
FileOutputStream mFileOutStream1 = openFileOutput("IMG" + counter + ".png", Context.MODE_PRIVATE);
photo.compress(CompressFormat.JPEG, 100, mFileOutStream1);
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
else
System.out.println("notttttnullllllllllllll");
try
FileOutputStream mFileOutStream1 = openFileOutput("IMG" + counter + ".png", Context.MODE_PRIVATE);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, mFileOutStream1);
catch (FileNotFoundException e)
// TODO Auto-generated catch block
e.printStackTrace();
Editor editor = def.edit();
editor.putInt("value", counter);
editor.commit();
break;
default:
break;
【问题讨论】:
【参考方案1】:您可以如下检查:
boolean hasDrawable = (croppedImageView.getDrawable() != null);
if(hasDrawable)
// imageView has image in it
else
// no image assigned to image view
只检查位图值如下:
if(bitmap == null)
// set the toast for select image
else
uploadImageToServer();
【讨论】:
boolean hasDrawable = (croppedImageView.getDrawable() != null); if(hasDrawable) System.out.println("drawableeeeee "+hasDrawable); else System.out.println("drawableeeeee"+hasDrawable);我实现了这段代码来检查,但它也没有给出任何响应。 你说的“没有给出任何回应”是什么意思?你看到System.out.println
的其他输出了吗?见***.com/q/2220547/827110
不,它不打印任何东西。
请使用Log.d
将输出记录到logcat
或使用调试器进行验证。也可以点击我在评论中发布的链接并阅读。【参考方案2】:
accepted answer 不正确至少在一种情况下:当您之前将 ImageView
s Bitmap
设置为 null
时,通过:
imageView.setImageBitmap(null);
实际上它不会将内部Drawable
设置为null
。所以,在接受的答案检查中提出的建议会给你不正确的结果。
您可以在ImageView
source code 中轻松了解发生了什么:
public void setImageBitmap(Bitmap bm)
// if this is used frequently, may handle bitmaps explicitly
// to reduce the intermediate drawable object
setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
意味着不是将其内部Drawable
设置为null
,而是将其设置为新创建的BitmapDrawable
和null
Bitmap
。
因此,检查ImageView
是否具有某种意义的Drawable
的正确方法如下:
publie static boolean hasNullOrEmptyDrawable(ImageView iv)
Drawable drawable = iv.getDrawable();
BitmapDrawable bitmapDrawable = drawable instanceof BitmapDrawable ? (BitmapDrawable)drawable : null;
return bitmapDrawable == null || bitmapDrawable.getBitmap() == null;
此外,查看源代码中的这种行为,您可能会认为null
Drawble
是 android SDK 开发人员试图避免的事情。这就是为什么您应该完全避免依赖getDrawable() == null
签入您的代码。
【讨论】:
以上是关于如何检查 ImageView 是不是包含位图?的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何将整个 ImageView 转换为位图?