Добавление этой прозрачной границы в 1px не так просто, как я думал.Добавление этого во время выполнения действительно грязно.Мое приложение загружает много растровых изображений, и чтобы добавить эту границу, мне нужно выделить еще больше растровых изображений для их перерисовки.Это действительно разрушает кучу, но, поскольку я позаботился о том, чтобы избежать утечки памяти, он работает как задумано.Что действительно убивает меня, так это «лаги», которые это принесло.Я отследил эту текучесть, потерянную для GC.Последнее, кажется, замедляет поток пользовательского интерфейса, когда он возвращает обратно переработанные растровые изображения.Использование кэша также не является решением.Это лучший способ повышения производительности, но хранение 500x500 PNG (с обязательной альфа-версией) является непропорциональным.Итак, вот я, бьюсь о стену.Я еще не пробовал способ «рисования времени», но я предполагаю, что рисование в буфере растровых изображений вне экрана, который я не думаю, будет HW в соответствии.(поправьте меня, если я ошибаюсь) не поможет моему делу.
Идея иметь «шейдер АА» действительно соблазняет, и я вижу здесь несколько преимуществ.Он хорошо поддерживается аппаратным ускорением, конечно, будет чудом для памяти (больше не будет дикого выделения растровых изображений) и может быть полностью независим от растрового масштабирования.Я сделал быстрый тест, и это лучший АА (и здесь я имею в виду по качеству), который мне когда-либо удавалось получить, и… это быстро… В этом быстром заключении можно сделать верхний край АА с использованием шейдеров.
Теперь большой недостаток!Как получить 4 ребра АА :) ???Вероятно, мы можем управлять верхним / нижним краем АА, используя многошаговый градиент, но он все еще грязный.Хорошим способом будет объединение исходного растрового изображения с каким-то 9-патчем для получения прозрачной границы, но мы не можем составить 2 bitmapShader… Итак, я снова здесь.Как получить эту маску Shader!Чертова стена;)