Android Compose – Как разместить/повторить растровое изображение/вектор?Android

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

Сообщение Anonymous »

Каков подход Android Compose к мозаике изображения для заполнения моего фона небольшим узором?
Наивный подход для растровых изображений без вращения может быть таким:@Composable
fun TileImage() {
val pattern = ImageBitmap.imageResource(R.drawable.pattern_bitmap)

Canvas(modifier = Modifier.fillMaxSize()) {
// rotate(degrees = -15f) { // The rotation does not produce the desired effect
val totalWidth = size.width / pattern.width
val totalHeight = size.height / pattern.height

var x = 0f
var y = 0f
for (i in 0..totalHeight.toInt()) {
y = (i * pattern.height).toFloat()
for (j in 0..totalWidth.toInt()) {
x = (j * pattern.width).toFloat()

drawImage(
pattern,
colorFilter = giftColorFilter,
topLeft = Offset(x, y)
)
}
}
// }
}
}

В Android XML вы можете легко создать XML для повторения растрового изображения.


Или, если вам нужно замостить вектор, вы можете использовать собственный класс Drawable для достижения своей цели.
TileDrawable(AppCompatResources.getDrawable(context, R.drawable.pattern_vector), Shader.TileMode.REPEAT)

class TileDrawable(drawable: Drawable, tileMode: Shader.TileMode, private val angle: Float? = null) : Drawable() {

private val paint: Paint = Paint().apply {
shader = BitmapShader(getBitmap(drawable), tileMode, tileMode)
}

override fun draw(canvas: Canvas) {
angle?.let {
canvas.rotate(it)
}
canvas.drawPaint(paint)
}

override fun setAlpha(alpha: Int) {
paint.alpha = alpha
}

override fun getOpacity() = PixelFormat.TRANSLUCENT

override fun setColorFilter(colorFilter: ColorFilter?) {
paint.colorFilter = colorFilter
}

private fun getBitmap(drawable: Drawable): Bitmap {
if (drawable is BitmapDrawable) {
return drawable.bitmap
}
val bmp = Bitmap.createBitmap(
drawable.intrinsicWidth, drawable.intrinsicHeight,
Bitmap.Config.ARGB_8888
)
val c = Canvas(bmp)
drawable.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight)
drawable.draw(c)
return bmp
}

}


Подробнее здесь: https://stackoverflow.com/questions/675 ... map-vector
Ответить

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

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

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

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

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