2010-03-08 4 views
16

Я использую следующий код, чтобы сделать растровое изображение во время OnDraw из пользовательского Viewандроид Paint.setShadowLayer() против Canvas.drawbitmap() проблемы

Paint p = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG); 
p.setShadowLayer(3,3,3,0xff000000); 
Bitmap bmp = BitmapFactory.decodeResource(some drawable jpg); 
canvas.drawBitmap(bmp,null,new Rect(blah blah),p); 

и тень выглядит смешно. Что я имею в виду? Я имею в виду, что я получаю другую тень, если я вызываю canvas.drawRect(). Он выглядит примерно так, как теневой код андроида обрабатывает растровое изображение как альфа-канал или что-то в этом роде.

попытались добавить p.setColor (0xff000000); и p.setStyle (Paint.Style.FILL); но не разница.

Я предполагаю, что я мог бы нарисовать изображение с тенью, а затем drawBitmap с тенью, но это кажется глупым, поскольку это будет рендеринг пикселей в два раза.

+4

в этом случае: изображение говорит более 1000 слов. Добавьте скриншот – WarrenFaith

ответ

-1

Возможно, у вас должны быть разные объекты Paint для разных целей, такие как текст, растровое изображение и т. Д. Таким образом, настройка не повлияет на других.

+0

Я делаю только одну операцию рисования и поэтому имею только один объект Paint. пожалуйста, перечитайте мой вопрос и код. – SteelBytes

2

В основном слой тени не работает ни на чем, кроме текста. Это действительно глупо. Проверьте Android hardware acceleration supported operations chart.

Этот вопрос был задан еще в 2010 году, когда аппаратные ускоренные деревья просмотра не существовали .. на основе прочитанных вещей, даже тогда теневой слой работал только на простые фигуры (если вообще), а другие стали странными результаты, используя его ни на чем, кроме текста. Возможно, вам не повезло.

Наконец, есть много способов подделать теневой слой. Вы можете обернуть представление в другое представление и нарисовать под ним. Вы можете написать представление, которое рисует тень как радиальный градиент и т. Д. Но вы, вероятно, просто хотите сделать 9patch, который выглядит как тень и использовать это.

Смежные вопросы