我正在研究Gingerbread(2.3.3)设备。我有一个ImageView,其中包含一个箭头图,并有一个完全透明的背景,我需要在一些背景上绘制。问题是在ImageView的边界框下面有一个“阴影”工件 如果你仔细观察下面的图像,你会看到我正在谈论的神器:1
前景图像和背景图像都有alpha通道,因此被解码为ARGB8888(我通过手动将其资源解码为位图来对此进行双重检查,打印出显示ARGB8888的位图配置,然后将它们分配给各自的视图)。在调用setContentView()之前,我还将Activitiy的窗口配置为PixelFormat.RGBA_8888。
请不要将我推荐给建议将位图解码为ARGB8888和/或将窗口设置为RGBA_8888的线程,因为我尝试了两种解决方案,但没有帮助。
任何想法如何解决此问题?
修改
这是设置Window像素格式和drawables的函数(直接从onCreate()调用):
public void testTransparency() { getWindow().setFormat(PixelFormat.RGBA_8888); setContentView(R.layout.transparency_test); LinearLayout ll = (LinearLayout)findViewById(R.id.ll); Bitmap bgBmp = BitmapFactory.decodeResource(getResources(), R.raw.bg); Log.d(TAG,"BG BMP Config: " + bgBmp.getConfig()); ll.setBackgroundDrawable(new BitmapDrawable(bgBmp)); ImageView iv = (ImageView)findViewById(R.id.iv); iv.setBackgroundDrawable(null); Bitmap arrowBmp = BitmapFactory.decodeResource(getResources(), R.raw.big_arrow); Log.d(TAG,"Arrow BMP Config: " + arrowBmp.getConfig()); iv.setImageBitmap(arrowBmp); }
这是我的测试使用的(非常简单的)布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center">
<ImageView android:id="@+id/iv"
android:layout_width="72dp"
android:layout_height="120dp"
/></LinearLayout>
可以在2发现'bg'资源 'big_arrow'资源可在“http://i.imgur.com/3V6QU.png”找到
编辑2:
我发现我无法在模拟器上重现问题,也无法在我的N1(2.3.4)或XOOM(3.2.1)上重现问题。这里有两个选项:
1.问题是设备特定的(基于Android的设备我正在研究)
2.在渲染透明PNG时,2.3.4和32BPP帧缓冲存在特定问题。
感谢。
答案 0 :(得分:0)
发现错误,实际上这是一个特定于平台的错误。
当我删除SKIA混合blitting部分中的霓虹灯优化时(在SkBlitRow_D32.cpp - SkBlitRow :: Proc32 SkBlitRow :: Factory32(无符号标志))中,我发现阴影神器消失了
对于想要调试此类错误的人来说,这是一个有用的提示:
您始终可以将视图层次结构绘制到位图(例如,请参阅:Android get a bitmap of a view before drawing?),然后使用 Bitmap.compress 方法将位图导出为PNG文件。这样,您可以使用其Alpha通道获取视图层次结构快照(由于它是在合成后生成的,因此不显示在A DDMS屏幕截图中)。我发现阴影区域内的alpha值为'1'而不是'0',从而创建了工件。
答案 1 :(得分:0)
只需设置
BackButton.setBackgroundColor(Color.TRANSPARENT);
使用Android 2.3.5在HTC Desire HD上使用ImageButton解决了我的问题,其中我的按钮图像的高度低于默认背景。经验观察;神器没有在Android 4.1.2的Galaxy Note 1上显示