4

更新
了我在 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 位窗口格式)。

为什么会出现这种行为,我该如何解决我的问题?

谢谢。再会!

4

1 回答 1

0

通过将drawables移动到hdpi文件夹来解决。

于 2011-10-03T16:11:09.283 回答