градиент на пряник - PullRequest
4 голосов
/ 19 июля 2011

Обновлено
У меня проблема с градиентными растровыми изображениями на Android 2.3. Я прочитал эту отличную статью и расшифровал свои растровые изображения, используя следующие параметры:

<code>BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inDither = true;
А на андроиде 2.2 все отлично, но на андроиде 2.3 даже после этого декодирования остаются артефакты градиента.

Я запускаю приложение из статьи на 2.3 с моими растровыми изображениями, и все варианты плохие: 16/32 бит, (не) дизеринг и RBG_565, ARGB_8888 и ARGB_4444 - у градиента есть артефакты. Также я пытался декодировать без параметров. Все в порядке. Извините, проблема была в

<code>opts.inScaled=true;
opts.inDensity=100;
opts.inTargetDensity=800;
<Ч />

Но теперь мне нужно заставить работать этот код на Android 2.3, и он все еще производит плохой градиент (на Android 2.2 все в порядке):

<code>    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 / до / после этого метода следующим образом:
    WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
    lp.copyFrom(getWindow().getAttributes());
    lp.format = PixelFormat.RGBA_8888;
    getWindow().setAttributes(lp);

Но ничего не изменилось (это пряник, он использует 32-битный формат окна).

Почему появляется такое поведение и как я могу решить мою проблему?

Спасибо. Добрый день!

1 Ответ

0 голосов
/ 03 октября 2011

решено с перемещением рисования в папку hdpi.

...