更新
了我在 android 2.3 上的渐变位图有问题。我阅读了这篇很棒的文章并使用下一个选项解码我的位图:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inDither = true;
在 android 2.2 上一切都很好,但在 android 2.3 上,即使在解码之后,渐变伪影仍然存在。
我使用我的位图从 2.3 上的文章运行应用程序,所有变体都不好:16/32 位、(非)抖动和 RBG_565、ARGB_8888 和 ARGB_4444 - 渐变有伪影。我也尝试在没有选项的情况下进行解码。一切都好。抱歉,问题出在
opts.inScaled=true;
opts.inDensity=100;
opts.inTargetDensity=800;
但现在我需要在 android 2.3 上运行这段代码,它仍然会产生不好的渐变(在 android 2.2 上一切正常):
ImageView imageView = (ImageView) tabView.findViewById(R.id.tabsImage);
// decode bitmaps
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inDither = true;
Bitmap tabImageOn = BitmapFactory.decodeResource(mainActivity.getResources(), tabImageResourceOnId, options);
Bitmap tabImageOff = BitmapFactory.decodeResource(mainActivity.getResources(), tabImageResourceOffId, options);
// create new selector
StateListDrawable tabImage = new StateListDrawable();
tabImage.addState(new int[] { android.R.attr.state_selected }, new BitmapDrawable(mainActivity.getResources(), tabImageOn));
tabImage.addState(new int[] {}, new BitmapDrawable(mainActivity.getResources(), tabImageOff));
tabImage.setDither(true);
// set selector to tab
imageView.setImageDrawable(tabImage);
我尝试onCreate
在该方法的 /before/after 下设置窗口像素格式:
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(getWindow().getAttributes());
lp.format = PixelFormat.RGBA_8888;
getWindow().setAttributes(lp);
但是什么都没有改变(它是姜饼,它使用 32 位窗口格式)。
为什么会出现这种行为,我该如何解决我的问题?
谢谢。再会!