用ImageView控件方法:public void setImageBitmap(Bitmap bm)
来显示生成的bimap,结果在图片显示区域显示一片空白,而且其他控件颜色没变化,造成Imageveiw显示图片不出来的假象。
问题原因是:
布局背景我设置为白色,而解码生成的bitmap刚好在白色背景下显示看不到一点图片痕迹,在显示图片的区域看到的只是一片空白,至于为什么bitmap在白色先显示不出来的原因暂还没想通。若你也遇到类似问题建议跟换背景试试。
如果是透明黑色的图片也显示不出来,最好要成不透明其他颜色
解决方法是:
将布局文件中ImageView所在的LinearLayout或其他Layout布局的背景颜色设置为黑色,这样之前一直显示图片不出来的图片终于露出原形。
小结:
这个问题算是个怪胎了,用H264解码生成的Bitmap放上去显示没一点问题,而MPEG4解码出来的Bitmap放上去就是显示不出来,之前怀疑解码生成的Bitmap有问题,经过反复验证,确认解码生成的Bitmap没有问题,才猜测Imageview显示有问题,费劲脑汁的跟换Imageview显示图片的方法。转来转去,搞了半天还是木有解决问题,后堡垒灵光一线,把布局背景颜色设置为黑色,结果图片显示出来了,太诡异了。搞了半天还是碰运气解决滴。
其实在我确认解码生成的Bitmap没问题之后,我应该想到为什么图片在默认的黑色背景下显示没一点问题,估计是被H264解码生成Bitmap显示没问题跟忽悠了,跟我定位问题时带了干扰。直接省去了那一环节。看来还是要程序化。
当问题找不到原因时,一定要每一个环节去对比验证,即使是最不可能发生的环节,往往这就是问题原因所在。
遇到问题,不用怕,解决它,仅此而已。
在此小结记录下byte[] 、Bitmap与Drawbale 三者直接的转换
1、byte[] ->Bitmap
Bitmap Bitmap = BitmapFactory.decodeByteArray(data, offset, length);
2、Bitmap->byte[] 这种转换我们应该将Bitmap看成是一张图片,这样我们想获取它的数据,就知道要通过流,而且是byte类型流,于是很容易记住转换方法 。
(1)ByteArrayOutputStream out = new ByteArrayOutputStream();//获取流
(2)bitmap.compress(CompressFormat.JPEG, 100, out);//将图片数据按照指定格式和质量压缩到某个流中,
(3)byte[] buf = out.toByteArray();//将流转换为byte[]
Bitmap 、Drawbale直接的转换方法特别好记,只有利用他们之间搭建着桥梁,BitmapDrawable,剩下的就是利用向上转型和向下转型的思路就可以搞定。
3、Bitmap->Drawbale 向上转型,因为Drawbale更靠近图片文件。
Drawable drawable = new BitmapDrawable(bitmap);
4、Drawbale->Bitmap 向下转型
Bitmap bitma = ((BitmapDrawable) bit).getBitmap();
至于byte[] 与Drawbale之间的转换,那么Bitmap又相当于是桥梁。大家都懂得。
相关推荐
使用ImageView显示图片很简单,下面的教程在布局文件中直接通过布局属性将图片布局了,so easy的~~教程见:http://www.ourunix.org/android/post/125.html
通过这种方式,我们不仅实现了在固定大小的ImageView中显示图片的指定区域,还提供了灵活的配置方式,可以根据应用的需求进行定制。这在处理大量图片或者有特殊显示需求的场景下非常有用,比如展示局部细节、裁剪...
这里的`android:src`属性用于指定要显示的图片资源。`@drawable/image_name`是一个引用,指向位于`res/drawable`目录下的图片资源。这个方法适用于加载已经包含在应用中的静态图片资源。 要通过图片的名字加载图片...
本文将深入探讨如何使用ImageView来显示图片,并介绍如何通过按钮控制图片的切换,实现简单的图片浏览功能。 首先,让我们了解ImageView的基本用法。在Android布局文件中,我们可以创建一个ImageView并设置其属性,...
本篇将详细探讨如何利用ImageView实现图片的放大功能,特别是如何让图片全屏显示,并支持局部拉伸放大,以及双击放大这一交互效果。 首先,我们需要了解ImageView的基础用法。ImageView继承自View类,通过设置其`...
在需要显示图片的Activity或Fragment中,使用Glide库加载图片。以下是一个简单的示例: ```java import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import ...
总的来说,自定义ImageView显示gif图片是一个涉及到图像处理、动画控制和性能优化的综合问题。通过理解和实现这个过程,开发者不仅可以掌握自定义View的基本技巧,还能提升对Android图形系统和动画框架的理解。...
Android实现imageView显示圆角图片、描边图片效果,具体效果请参见运行截图所示。用在你的android APP中,可美化图片,让图片的显示更漂亮。这个例子主要是让大家熟悉imageView控件的用法技巧,除了可以实现圆形图片...
本项目源码是针对Android端实现的图片异步加载功能,同时结合了内存缓存、文件缓存以及ImageView显示图片时的淡入淡出动画效果。下面将详细阐述这些知识点。 1. **异步加载图片**: 异步加载图片是为了防止UI线程...
因此,`ImageView`联网显示图片是Android开发中的一个重要知识点,尤其是对于初学者来说。本篇文章将深入探讨如何在Android中实现`ImageView`联网显示图片,并遵循正确的多线程原则。 首先,我们需要了解Android的...
对于ImageView显示圆角图片的需求,Android提供了一种通过设置`android:background`属性并配合使用`shape` drawable的方法,但这只适用于本地图片。对于网络图片,我们需要自定义一个圆形的ImageView。以下是一个...
在Android开发中,有时我们需要为应用的界面增添个性化效果,比如让ImageView显示为圆角图片。这通常是通过自定义ImageView来实现的。本教程将详细讲解如何创建一个自定义的ImageView,使其能够显示任意圆角角度的...
用户可以直接从文件资源管理器中选择一个或多个图片文件,然后将其拖放到ImageView的图标或打开的窗口上,程序会自动加载并显示这些图片。这种方式使得图片浏览变得更加直观和快捷。 2. **命令行调用**: 对于需要...
一种方法是动态计算缩放比例,使得图片的宽高不超过ImageView的宽高: ```java float scaleWidth = Math.min((float) mainImageView.getWidth() / overlayImageView.getDrawable().getIntrinsicWidth(), (float) ...
在Android开发中,ImageView是用于显示图像的常见组件。它支持多种操作,包括图片的缩放和移动。本文将深入探讨如何在Android中实现ImageView的图片缩放功能,同时结合异步加载和Activity的半透明效果,提升用户体验...
默认情况下,ImageView显示图片时并不会提供缩放功能。为了实现点击图片放大,我们可以借助一些第三方库,例如Glide或Picasso,它们不仅提供了加载图片的功能,还可以轻松实现图片的缩放和平移。 以Glide为例,这是...
在Android开发中,将网络上的...5. 将Bitmap设置到ImageView显示。 6. 可选地,使用图片加载库如Glide或Picasso优化整个流程。 通过以上步骤,我们可以实现高效、流畅的图片加载效果,提升用户在Android应用中的体验。
Android中ImageView实现平铺多张图片Android中实现平铺图片有两种方式:在drawable中定义平铺的Bitmap然后在ImageView中引
一种是按需缩放,即只在显示图片时才进行缩放,这样可以节省内存但可能会增加加载时间。另一种是预先缩放,即在图片加载时就根据视图大小进行缩放,然后存储在内存中,这样可以加快显示速度但会占用更多内存。选择哪...
在Android开发中,`ImageView` 是一个非常基础且重要的组件,用于显示图片资源。然而,系统默认的`ImageView`并不支持直接添加边框。在实际应用中,有时我们需要为图片添加各种样式的边框,以满足UI设计的需求。在...