Градиент отображается в SurfaceView с полосами, но в обычном режиме выглядит очень плавно - PullRequest
7 голосов
/ 15 октября 2011

Моя проблема в том, что при рисовании простого тестового изображения (прямоугольник с градиентной заливкой) в пределах SurfaceView градиент имеет цветную полосу. При рисовании точно такого же прямоугольника с тем же градиентом в простом расширенном View, градиент выглядит очень плавным, и так хорошо, как и следовало ожидать для 32-битного цвета.

Это происходит бок о бок с использованием теста SurfaceView, помещенного рядом с тестом View в рамках той же схемы в том же Activity.

Для информации, в классе Activity я звоню window.setFormat(PixelFormat.RGBA_8888), чтобы переключить Activity на 32-битный цвет, поскольку в прошлом это было решением для устранения полос в градиентах (однако я считаю, что это не требуется больше на определенном уровне Android, где по умолчанию используется 32-разрядная версия). Мой minSdkVersion равен 8.

Тестовый код, который появляется в onDraw() как простого расширенного View, так и SurfaceView:

    Paint paint = new Paint();
    paint.setStyle(Paint.Style.FILL);
    paint.setAntiAlias(false);
    paint.setFilterBitmap(false);
    paint.setDither(false); 
    Shader shader = new LinearGradient(
            0,
            0,
            0,
            200,
            new int[]{0xff150d2f,0xff432b96},
            null,
            Shader.TileMode.CLAMP
            );

    paint.setShader(shader);    
    canvas.drawRect(0,0,getWidth(),getHeight(), paint);

Вот скриншот, показывающий SurfaceView вверху и обычный View внизу. Я понимаю, что объединение очень тонкое в этом примере; это еще более очевидно, когда градиент охватывает меньшую полосу цветов.

Screenshot

Есть предложения, пожалуйста?

Трев

1 Ответ

12 голосов
/ 15 октября 2011

В конце концов сам нашел решение, добавив в конструктор SurfaceView:

getHolder().setFormat(PixelFormat.RGBA_8888);
...