По умолчанию компоновка реактивного ранца использует сам перетаскиваемый элемент в качестве украшение перетаскивания, но вместо этого я хочу использовать другой составной элемент.
Если я ничего не сделаю, 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)
}
) {
//...
}
)
У меня есть одна идея — каким-то образом преобразовать компонуемое изображение в растровое изображение, а затем нарисовать его в лямбда-выражении drawDragDecoration с помощью API холста (я не знаю, даже возможно ли это в Compose). Есть ли лучший способ сделать это? Мы будем очень признательны за любые обходные пути или предложения!
Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ck-compose