Assigned
Status Update
Comments
ry...@gmail.com <ry...@gmail.com> #2
Comment has been deleted.
rl...@google.com <rl...@google.com>
ry...@gmail.com <ry...@gmail.com> #3
Now i sure this is viewpager2's bug.
because just occur recyclerview inside viewpager2 with constraintlayout, if paging3 use Independently with viewpage2 it's not problem.
because just occur recyclerview inside viewpager2 with constraintlayout, if paging3 use Independently with viewpage2 it's not problem.
Description
Version used: 1.3.1
Devices/Android versions reproduced on: Virtual Pixel 8 API 35 x86_34
If this is a bug in the library, we would appreciate if you could attach:
Screen Shot:
(Broken)
(Working)
Code: (BOM "2024.08.00" works, BOM "2024.09.00" does not work (material3 v 1.3.0))
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
DragDropTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
Greeting(
modifier = Modifier.padding(innerPadding)
)
}
}
}
}
}
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun Greeting(
modifier: Modifier = Modifier
) {
val list = listOf("Box A", "Box B", "Box C", "Box D")
var enteredBox by remember { mutableStateOf<Int?>(null) }
var offSetPosition by remember { mutableFloatStateOf(0f) }
val scrollState = rememberScrollState()
var dragStartPosition by remember { mutableStateOf(0f) }
var dragOffset by remember { mutableStateOf(0f) }
val dragAndDropPayload by remember { mutableStateOf("PAYLOAD") }
Surface(
modifier = modifier
.fillMaxSize(),
color = Color.LightGray
) {
Column {
Box(
modifier = modifier
.fillMaxWidth()
.height(55.dp)
.background(Color.Blue)
.dragAndDropSource {
detectTapGestures(
onPress = {
startTransfer(
DragAndDropTransferData(
ClipData(
"test",
arrayOf("MimTypes stuff"),
ClipData.Item("N/A")
),
localState = dragAndDropPayload,
),
)
},
)
},
contentAlignment = Alignment.Center
){
Text("DRAG ME", color = Color.White)
}
Row(
modifier.fillMaxWidth().padding(0.dp),
horizontalArrangement = Arrangement.Center
){
Text("BOM v 2024.08.00 works", color = Color(0xFF0CC584))
}
Row(
modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.Center
){
Text("BOM v 2024.09.00 no bueno", color = Color.Red)
}
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = modifier
.verticalScroll(scrollState)
.clipToBounds()
.fillMaxSize()
.offset {
IntOffset(
0,
offSetPosition
.toInt()
.div(4)
)
}
) {
list.forEachIndexed { index, title ->
Row(
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically,
modifier = modifier
.fillMaxWidth()
.height(50.dp)
.background(
if (enteredBox == index) Color(0xFF0CC584) else Color(0xFF151F38)
)
.dragAndDropTarget(
shouldStartDragAndDrop = { true },
target = object : DragAndDropTarget {
override fun onStarted(event: DragAndDropEvent) {
super.onStarted(event)
Log.d("D&D", "started $event")
dragStartPosition = event.toAndroidDragEvent().y
}
override fun onMoved(event: DragAndDropEvent) {
super.onMoved(event)
val dragPosition = event.toAndroidDragEvent().y
dragOffset = dragStartPosition - dragPosition
offSetPosition = dragOffset
}
override fun onDrop(event: DragAndDropEvent): Boolean {
Log.d("D&D", "drop $event")
enteredBox = null
offSetPosition = 0f
return true
}
override fun onEntered(event: DragAndDropEvent) {
super.onEntered(event)
Log.d("D&D", "entered $event")
enteredBox = index
}
override fun onExited(event: DragAndDropEvent) {
super.onExited(event)
Log.d("D&D", "exited $event")
enteredBox = null
}
override fun onEnded(event: DragAndDropEvent) {
super.onEnded(event)
Log.d("D&D", "ended $event")
enteredBox = null
offSetPosition = 0f
}
}
)
){
Text(title.uppercase(), color = if(index == enteredBox) Color.Black else Color.White)
}
}
}
}
}
}