Intereting Posts
Использование ListView: как добавить представление заголовка? Шифрование RSA: разница между Java и Android Как установить текст TextView? Как реализовать значения элементов setMultiChoiceItems в onPrepareDialog? PCM Raw Bytes для аудио на Android Intent – если активность запущена, переведите ее вперед, иначе запустите новую (от уведомления) Ошибка INSTALL_FAILED_DEXOPT при попытке установить приложение Упрощенный и традиционный китайский против регионов Лучший способ быстро запустить тесты JUnit в Android-проекте в Android Studio Укажите максимальный размер sqlite db для моего приложения. Как обрабатывать полное исключение db Как проверить разрешения на гранты во время выполнения? Добавление параметров для выбора с помощью jQuery не работает Как настроить карту Android sdk v2 для использования разных ключей для производства и разработки? Частичное обновление RecyclerView.ViewHolder Получить счетчик с помощью cursor.getCount () или выполнить rawQuery с COUNT в SQL-предложение?

Android BlurMaskFilter не влияет на canvas.drawOval, в то время как текст размыт

Я пытаюсь создать пользовательский вид, который имеет размытые формы под текстом. Проблема в том, что BlurMaskFilter не влияет на любую фигуру, которую я рисую на холсте. Вот как я инициализирую объекты Paint в конструкторе:

paint = new Paint(0); paint.setColor(0xffffffff); paint.setMaskFilter(new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL)); mShadowPaint = new Paint(0); mShadowPaint.setColor(0xff333333); mShadowPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL)); 

И я вызываю такие функции в onDraw ():

 canvas.drawOval(mShadowBounds,mShadowPaint); canvas.drawText("hello", x, y, paint); 

Но это то, что я вижу.

Овал не размыт, но текст размыт.

Использование android 4.0 sdk и тестирование на устройстве 4.0x галактики Nexus (Великобритания). Мне интересно, является ли это ошибкой в ​​4.0.4, поскольку я тестировал ее на эмуляторе с 4.0 и 4.0.3, и он отлично смахивал на них, если я не делаю что-то совершенно неправильное?

EDIT: Вот расширенный код просмотра, чтобы протестировать его на других платформах.

 import android.content.Context; import android.graphics.BlurMaskFilter; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.view.View; public class BlurTestView extends View{ private Paint paint; private Paint mShadowPaint; private int size = 100; private RectF mShadowBounds = new RectF(); public BlurTestView(Context context) { this(context, null, 0); } public BlurTestView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public BlurTestView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); paint = new Paint(0); paint.setColor(0xff333333); paint.setTextSize(size); paint.setMaskFilter(new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL)); mShadowPaint = new Paint(0); mShadowPaint.setColor(0xff333333); mShadowPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL)); mShadowBounds.top = size; mShadowBounds.bottom = mShadowBounds.top+(size /2); mShadowBounds.left = 0; mShadowBounds.right = (int)paint.measureText("hello"); } @Override public void onDraw(Canvas canvas) { canvas.drawOval(mShadowBounds,mShadowPaint); canvas.drawText("hello", 0, size, paint); } } 

Solutions Collecting From Web of "Android BlurMaskFilter не влияет на canvas.drawOval, в то время как текст размыт"

Похож на меня. Я сообщил об этом команде Android; Мы увидим, что они говорят.

Он корректно отображает, если вы установили android:hardwareAccelerated="false" в своей деятельности в AndroidManifest.xml .

Вот официальное слово команды графических адаптеров Android: «BlurMaskFilter не поддерживается аппаратным ускорением». (По состоянию на 10 июля 2012 года)

У меня была такая же проблема, добавляя фильтр к пути. Я заметил, что установка цели до 13 или ниже позволяет фильтрам работать. 14, и они этого не сделали.

 android:targetSdkVersion="13" 

Если вы не можете отключить аппаратное ускорение в своей деятельности (например, оно использует TextureView, для которого требуется аппаратное ускорение), вы можете просто вызвать setLayerType с первым параметром LAYER_TYPE_SOFTWARE и вторым параметром null для вашего представления.

Как это

 public class BlurTestView extends View { public BlurTestView(Context context) { this(context, null, 0); } public BlurTestView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public BlurTestView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // Disable hardware acceleration for this view setLayerType(View.LAYER_TYPE_SOFTWARE, null); // Perform other initialisation } // Other methods and so on... } 

Подробнее о маске фильтры, эффекты и шейдеры вы можете найти здесь .