плавный градиент на разных устройствах - PullRequest
15 голосов
/ 26 июля 2010

В моем приложении у меня есть рисованный градиент, который я использую в качестве фона, и я не хочу, чтобы он выглядел как можно более плавным.Погуглив и попробовав сам, я пришел к следующему.На Nexus One, если вы вызываете только setDither (true), ваш градиент все еще является полосатым, поэтому вы должны установить PixelFormat, например, Window.setFormat (PixelFormat.RGBA_8888).Но с другой стороны, G1 не поддерживает RGBA_8888, поэтому его вызов делает градиент еще страшнее, чем раньше, поэтому Window.setFormat (PixelFormat.RGBA_8888) будет плохо работать на устройствах, которые его не поддерживают.

Что такоеправильный способ сглаживания градиента на всех устройствах, на которых будет запускаться мое приложение.

PS: я нашел несколько связанных тем

Как нарисовать плавный / размытый градиент на холсте вAndroid

Можно ли сглаживать градиент для рисования?

Ответы [ 4 ]

2 голосов
/ 17 января 2011

Вы можете использовать пользовательскую фигуру (поместите ее в /drawable/gradient.xml или что-то в этом роде):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
    android:startColor="#000000"
    android:endColor="#ffffff"
    android:angle="90"/>
</shape>

Таким образом, она будет нарисована ОС и должна быть идеально гладкой.

2 голосов
/ 26 ноября 2010

Откройте свое изображение в Photoshop (или Gimp, Paint.NET или что-то еще) и добавьте небольшое количество шума. Тогда вам не нужно ничего делать в коде.

1 голос
/ 01 декабря 2010

При загрузке изображения установите для pixelFormat значение RGB_565 и установите для параметра TrueDither значение true, если вы рисуете его прямо на экране без каких-либо других изменений.

Дисплеи, как правило, не 24-битные, что, как правило, должно быть достаточно хорошим, по крайней мере, довольно стабильно.

Вам не нужно использовать 8888, если вам не нужна альфа-версия и вы не будете изменять данные изображения. На 99% мобильных дисплеев он будет отображаться в 16-битном цвете, а не в 24-битном, поскольку это то, что поддерживают панели.

У N1 всегда будут проблемы близко, потому что матрица, которую они используют для панели, имеет двойное разрешение зеленого цвета.

0 голосов
/ 17 марта 2015

Если на некоторых телефонах настройка дизеринга и RGBA_888 не помогает, решением может быть установка элемента layerType на software, чтобы отключить аппаратное ускорение

android:layerType="software"

Это исправило мойпроблема на телефоне Samsung S5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...