成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

像魔法一樣操控組件!Jetpack Compose拖拽超能力揭秘

開發(fā) 開發(fā)工具
今天我們就來解鎖這個讓界面活起來的超能力!不需要魔杖,只需要Jetpack Compose和一點(diǎn)小技巧~

想知道怎么讓你的Android組件像磁鐵一樣隨手勢移動嗎?今天我們就來解鎖這個讓界面活起來的超能力!不需要魔杖,只需要Jetpack Compose和一點(diǎn)小技巧~

基礎(chǔ)裝備:手勢處理三件套

位置追蹤器(offsetX/Y)

var offsetX by remember { mutableFloatStateOf(0f) } // X軸坐標(biāo)記錄員
var offsetY by remember { mutableFloatStateOf(0f) } // Y軸坐標(biāo)記錄員

就像給組件裝了個GPS,隨時記錄它在地圖上的位置

動作感應(yīng)器(pointerInput)

Modifier.pointerInput(Unit) { /* 手勢監(jiān)聽區(qū) */ }

相當(dāng)于給組件戴了個智能手表,能感知你的每個觸摸動作

拖拽解析器(detectDragGestures)

detectDragGestures(
    onDragStart = { /* 開始拖拽 */ }, 
    onDrag = { _, amount -> /* 實(shí)時追蹤 */ },
    onDragEnd = { /* 停止拖拽 */ }
)

這個黑科技能把你的手指軌跡翻譯成組件移動的指令!

完整咒語:讓文字圖片飛起來

@Composable
fun MagicDraggableText() {
    // 狀態(tài)管理三兄弟
    var offsetX by remember { mutableFloatStateOf(0f) }
    var offsetY by remember { mutableFloatStateOf(0f) }
    var isDragging by remember { mutableStateOf(false) }

    Box(Modifier.fillMaxSize()) {
        Box(
            modifier = Modifier
                .align(Alignment.Center)
                .offset { IntOffset(offsetX.toInt(), offsetY.toInt()) }
                .background(
                    color = when {
                        isDragging -> Color(0xFFFFA500).copy(alpha = 0.7f) // 飛行時橙色尾跡
                        else -> Color(0xFFE0E0E0) // 靜止時灰色機(jī)身
                    },
                    shape = RoundedCornerShape(8.dp)
                )
                .padding(16.dp)
                .pointerInput(Unit) {
                    detectDragGestures(
                        onDragStart = {
                            isDragging = true
                            Log.d("Drag", "?? 發(fā)射!")
                        },
                        onDrag = { _, amount ->
                            offsetX += amount.x // X軸位移累加器
                            offsetY += amount.y // Y軸位移累加器
                        },
                        onDragEnd = {
                            isDragging = false
                            Log.d("Drag", "?? 降落點(diǎn):($offsetX, $offsetY)")
                        }
                    )
                }
        ) {
            Column(horizontalAlignment = Alignment.CenterHorizontally) {
                Text(
                    text = if (isDragging) "哇!我在飛~"else"點(diǎn)我起飛 ??",
                    modifier = Modifier.padding(bottom = 8.dp)
                )
                Image(
                    painter = painterResource(R.drawable.img),
                    contentDescription = null,
                    modifier = Modifier
                        .size(100.dp)
                        .clip(PolygonShape(sides = 6)) // 六邊形裁剪
                )
            }
        }
    }
}

? 效果展示

圖片圖片

運(yùn)行這段代碼你會得到:

  • ? 初始狀態(tài):一個安靜的灰色文字框
  • ? 開始拖動:變成醒目的橙色,文字變成飛行狀態(tài)
  • ? 實(shí)時移動:文字跟隨手指軌跡流暢滑動
  • ? 松開手指:自動記錄最終位置

高階魔法技巧

1. 拖拽邊界限制:給你的組件裝上電子圍欄

// 在onDrag回調(diào)中加入邊界判斷
offsetX = (offsetX + amount.x).coerceIn(0f..maxWidth)
offsetY = (offsetY + amount.y).coerceIn(0f..maxHeight)

2. 慣性滑動:讓組件松手后還能滑行一段

// 使用Animatable實(shí)現(xiàn)慣性效果
val offset = remember { Animatable(Offset(0f, 0f), Offset.VectorConverter) }

3. 多點(diǎn)觸控:雙指縮放旋轉(zhuǎn)三指操作

detectTransformGestures { _, pan, zoom, rotation ->
    // 同時處理平移、縮放、旋轉(zhuǎn)
}

小貼士

? 記得給拖拽組件設(shè)置clickable = false避免點(diǎn)擊沖突

? 復(fù)雜場景建議使用Modifier.combinedClickable

? 性能優(yōu)化小技巧:對頻繁更新的狀態(tài)使用mutableStateOf

現(xiàn)在你已經(jīng)掌握了讓界面元素自由舞動的秘訣!快去創(chuàng)造屬于你的魔法界面吧~

源碼https://github.com/Reathin/Sample-Android/tree/master/module_compose_drag


責(zé)任編輯:武曉燕 來源: 沐雨花飛碟
相關(guān)推薦

2011-02-22 17:48:34

Konqueror

2013-03-11 13:35:26

腕帶

2023-11-12 23:01:44

PaddleOCR深度學(xué)習(xí)

2015-03-13 11:23:21

編程編程超能力編程能力

2023-12-22 14:31:52

2021-08-03 21:24:13

ARVR

2024-03-14 08:28:45

2024-11-04 19:46:38

2025-05-26 08:24:45

2025-06-17 08:21:16

Android區(qū)域UI模塊

2024-11-26 00:41:23

Python編程腳本

2023-04-05 14:19:07

FlinkRedisNoSQL

2021-08-12 06:08:15

CSS 技巧組件狀態(tài)

2013-12-02 10:30:29

瀏覽器

2024-04-03 13:50:00

開源模型

2023-05-23 13:59:41

RustPython程序

2013-12-31 09:19:23

Python調(diào)試

2013-12-17 09:02:03

Python調(diào)試

2022-12-21 15:56:23

代碼文檔工具

2011-04-08 14:11:48

集裝箱數(shù)據(jù)中心
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩三级在线观看 | 色视频欧美 | 91网在线观看 | 亚洲欧美日韩一区二区 | 99在线免费视频 | 91精品久久久久久久久中文字幕 | 欧美一区二区三区四区在线 | a黄视频 | 成在线人视频免费视频 | 一区二区三区精品 | 一区二区三区视频在线 | 国产精品美女久久久久久免费 | 国产美女久久 | 日韩成人免费视频 | 国产一区二区日韩 | 亚洲一区二区视频 | 区一区二在线观看 | 最近中文字幕在线视频1 | 日本不卡一区二区三区 | 成人在线中文字幕 | 成人免费视频在线观看 | 美女国内精品自产拍在线播放 | www.操.com | 国产成人精品a视频一区www | 欧美日韩一区在线播放 | 久久久久久国产精品免费免费狐狸 | 精品国产乱码久久久久久88av | 日本特黄a级高清免费大片 特黄色一级毛片 | 精品视频一区二区 | 久久精品二区亚洲w码 | 亚洲一区二区三区四区五区中文 | 成人日韩精品 | 欧美区在线 | 国产一级在线观看 | 日韩不卡三区 | 国产视频久久 | 91免费版在线观看 | 亚洲视频手机在线 | 99综合在线| 久久国产精品无码网站 | 日韩一区二区在线播放 |