Как использовать пользовательский компонуемый элемент в качестве украшения перетаскивания в Jetpack Compose?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать пользовательский компонуемый элемент в качестве украшения перетаскивания в Jetpack Compose?

Сообщение Anonymous »

Я работаю над приложением, в котором хочу использовать пользовательский составной элемент в качестве украшения при перетаскивании элемента.
По умолчанию компоновка реактивного ранца использует сам перетаскиваемый элемент в качестве украшение перетаскивания, но вместо этого я хочу использовать другой составной элемент.
Если я ничего не сделаю, compose автоматически будет использовать исходный элемент в качестве оформления перетаскивания, как в примере ниже:
Изображение

Код: Выделить всё

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
App(
modifier = Modifier
.padding(innerPadding)
.fillMaxSize()
)
}
}
}
}

@Composable
fun DragSource(modifier: Modifier = Modifier) {
Box(
modifier = modifier
.background(color = Color.Yellow)
.size(100.dp),
contentAlignment = Alignment.Center
) {
Text(text = "Drag Me")
}
}

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun App(modifier: Modifier = Modifier) {
Box(
modifier = modifier,
contentAlignment = Alignment.Center
) {
DragSource(
modifier = Modifier.dragAndDropSource {
detectTapGestures(
onLongPress = {
startTransfer(
DragAndDropTransferData(
ClipData.newPlainText("image uri", "image uri")
)
)
}
)
}
)
}
}
Теперь вместо использования исходного элемента в качестве украшения перетаскивания я хочу использовать собственный составной элемент, подобный этому:

Код: Выделить всё

@Composable
fun DraggedShape(modifier: Modifier = Modifier) {
Box(
modifier = modifier
.size(100.dp)
.background(color = Color.Red, shape = RoundedCornerShape(16.dp))
)
}
Как я могу этого добиться?
Я знаю, что dragAndDropSource предоставляет параметр drawDragDecoration, где вы можете рисовать собственные украшения используя API холста, как в примере ниже, я рисую синий прямоугольник:
Изображение

Код: Выделить всё

DragSource(
modifier = Modifier.dragAndDropSource(
drawDragDecoration = { // draw scope
drawRect(color = Color.Blue)
}
) {
//...
}
)
Однако это позволяет рисовать только с помощью холста, и мне нужно использовать составной элемент в качестве украшения перетаскивания, а не просто фигуру, которую я могу перетаскивать с помощью API холста.
У меня есть одна идея — каким-то образом преобразовать компонуемое изображение в растровое изображение, а затем нарисовать его в лямбда-выражении drawDragDecoration с помощью API холста (я не знаю, даже возможно ли это в Compose). Есть ли лучший способ сделать это? Мы будем очень признательны за любые обходные пути или предложения!
Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ck-compose
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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