Когда инициализировать ресурсы, которые будут использоваться внутри Compose Canvas?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Когда инициализировать ресурсы, которые будут использоваться внутри Compose Canvas?

Сообщение Anonymous »


Я использую Jetpack Compose и хочу создать круг с собственными эффектами тени/градиента. Насколько мне известно, невозможно создать это с помощью составных объектов внутри DrawScope, и вместо этого мне приходится использовать NativeCanvas. В моем случае это отлично работает, но, насколько я помню, когда мы используем View и пишем что-то в методе onDraw(), мы НЕ ДОЛЖНЫ ИНИЦИАЛИЗИРОВАТЬ там НОВЫЕ ОБЪЕКТЫ. Поскольку метод вызывается каждые 30/60 кадров в секунду, при использовании анимации создание новых объектов для каждого вызова приведет к снижению производительности.

Где правильно определить эти объекты BlurMaskFilter, RadialGradient, Paint, чтобы их можно было повторно инициализировать только тогда, когда размер составной элемент меняется?
Мне было интересно, следует ли мне определить их как lateinit var вне функции, а затем использовать SideEffect для их инициализации? Я забыл упомянуть, что я использую InfiniteTransition, а затем использую состояние для изменения фигур, нарисованных внутри NativeCanvas!
Коробка( модификатор = Модификатор .size(ширинаDp, ширинаDp) .drawBehind { drawIntoCanvas { холст -> холст.nativeCanvas.apply { val BlurMask = BlurMaskFilter( 15ф, BlurMaskFilter.Blur.NORMAL ) val радиальныйGradient = android.graphics.RadialGradient( 100ф, 100ф, 50ф, intArrayOf(android.graphics.Color.WHITE, android.graphics.Color.BLACK), floatArrayOf(0f, 0.9f), android.graphics.Shader.TileMode.CLAMP ) val краска = Paint().asFrameworkPaint().apply { шейдер = радиальный градиент MaskFilter = BlurMask цвет = android.graphics.Color.WHITE } drawCircle(100f, 100f, 50f, краска) } } } ) { }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»