当前位置: 首页 > news >正文

北京公司注册在哪个网站风车网站做花盆磨具

北京公司注册在哪个网站,风车网站做花盆磨具,建设局是做什么的,电脑速成班短期电脑培训班Compose手势 本文链接: 点击 拖动 滑动 锚点 Compose Drag 拖动原理 Compose Drag 拖动原理:等待第一次按下 挂起 // UI展现出来的时候,这个while循环就已经在等待第一次按下了。事件 -> 恢复判断拖动合法性合法onDragStartonDragonDragEndforEa…

Compose手势

本文链接:

点击
拖动
滑动

锚点

Compose Drag 拖动原理

Compose Drag 拖动原理:等待第一次按下 挂起 // UI展现出来的时候,这个while循环就已经在等待第一次按下了。事件 -> 恢复判断拖动合法性合法onDragStartonDragonDragEndforEachGesture{awaitPointerEventScope{val down = awaitFirstDown()onDragStart.invokeonDragonDragCancel // 看条件onDragEnd // 看条件}
}

变换手势原理

功能代码

@Composable
fun TransformGestureDemo() {var boxSize = 100.dpvar offset by remember { mutableStateOf(Offset.Zero) }var ratationAngle by remember { mutableStateOf(0f) }var scale by remember { mutableStateOf(1f) }Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {Box(Modifier.size(boxSize).rotate(ratationAngle) // 需要注意offset与rotate的调用先后顺序.scale(scale).offset {IntOffset(offset.x.roundToInt(), offset.y.roundToInt())}.background(Color.Green).pointerInput(Unit) {detectTransformGestures(panZoomLock = true, // 平移或放大时是否可以旋转// 该回调,会在内部被调用onGesture = { centroid: Offset, pan: Offset, zoom: Float, rotation: Float ->offset += panscale *= zoomratationAngle += rotation})})}
}

源码

  • UI页面展示的时候,就在等待第一个事件到来(挂起)
suspend fun PointerInputScope.detectTransformGestures(panZoomLock: Boolean = false,onGesture: (centroid: Offset, pan: Offset, zoom: Float, rotation: Float) -> Unit
) {// while循环,处理事件forEachGesture {awaitPointerEventScope {// 省略xxx// 等待第一次按下awaitFirstDown(requireUnconsumed = false)do {val event = awaitPointerEvent() // 点击事件val canceled = event.changes.fastAny { it.isConsumed }if (!canceled) {val zoomChange = event.calculateZoom() // 变换值val rotationChange = event.calculateRotation() // 变换值val panChange = event.calculatePan() // 变换值// 省略xxx// 调用回调(我们自己实现的方法)onGesture(centroid, panChange, zoomChange, effectiveRotation)}} while (!canceled && event.changes.fastAny { it.pressed })}}
}

点击事件分发

1、ComposeView装载AndroidComposeView

2、补充知识点:onTouchEvent返回true代表消费完了,从上到下,从下到上 => U型结构自上而下

3、AndroidComposeView.java#dispatchTouchEvent

dispatchTouchEvent()
-->val processResult = handleMotionEvent(motionEvent)-->pointerInputEventProcessor.process(pointerInputEvent, xxx)-->root.hitTest() // flutter有个方法hitTest,一批人开发,用于点击测试/点击命中-->hitPathTracker.addHitPath()// 加入到【候选人名单】中-->hitPathTracker.dispatchChanges() // 处理两种事件,三种事件会分发三次-->root.dispatchMainEventPass()-->children.forEach {dispatched = it.dispatchMainEventPass() || dispatched} // 点击测试,从父节点到子节点-->pointerInputNode.onPointerEvent(event, PointerEventPass.Main, size)-->dispatchPointerEvent(pointerEvent, pass)-->it.offerPointerEvent(pointerEvent, pass)-->resume(event)  // 恢复 awaitFirstDown(),第一次按下会挂起。 ==> 上面变换、拖拽、点击的awaitFirstDown()-->root.dispatchFinalEventPass()
-->if (processResult.anyMovementConsumed) parent.requestDisallowInterceptTouchEvent(true)
-->return processResult.dispatchedToAPointerInputModifier

Compose事件

1、事件传递:从上至下

  1. root
  2. layoutNode1
  3. layoutNode2
  4. layoutNode3

2、候选人机制:

  1. 3个Node都包含点击的这个点
  2. Compose会把包含了这个点的,都加入到候选人名单(共四个)
  3. 不想走两遍

3、对名单中候选人进行判定:不能处理的就从名单剔除 ====> Flutter也是如此

  1. 从layoutNode3(最上层的)优先判定

4、添加到候选人名单的条件(名单一般很少,几个)

  1. 包含点
  2. 添加了事件

5、Compose事件类型,会分发两个线路main和final

  1. init
  2. main
  3. final

6、Root是什么?

  1. LayoutNode
  2. 根节点
AndroidComposeView.java对root初始化:override val root = LayoutNode().also {it.measurePolicy = RootMeasurePolicyit.density = density// Composed modifiers cannot be added here directlyit.modifier = Modifier.then(semanticsModifier).then(rotaryInputModifier).then(_focusManager.modifier).then(keyInputModifier)}
http://www.yayakq.cn/news/158079/

相关文章:

  • 网站建qq群蚌埠北京网站建设
  • 网站开发 外文文献wordpress大学主题wpdx
  • 郑州最好网站制作公司培训学校网站模板
  • 门户网站ip地址段网站管理员是干什么的
  • 有了网站模板 还要怎样做seo网站优化代码
  • 海外房地产网站建设wordpress ip 插件
  • 柳州本地做网站的公司wordpress数据库导出工具
  • 网站怎么seo做我女朋友的套路网站
  • 安庆网站建设专业制公司网页简介
  • 设计师做兼职的网站有哪些大唐网站建设
  • 企业网站建设 企业官网定制镇江制作网页图片
  • 怎么架设一个网站网上下载的网站后台安全吗
  • 网站的地图要怎么做vue加wordpress
  • 营销型网站sempk网站建设 化工
  • 怎么做网站免费舟山网站建设设计
  • 漳州网站建设到博大dw设计软件
  • 做网站要学的教程济宁做公司网站
  • 开题报告电子商务网站建设中国工程建设管理协会网站
  • 云南网站优化哪家好dw建设手机网站
  • 打开网站显示在建设中怎么区分模板网站和定制网站
  • 做网站遇到的困难总结前端开发学习网站
  • 网站规划建设书wordpress设置谷歌验证
  • 可以将自己做的衣服展示的网站山东省住房城乡建设部网站
  • 网站商品展示页怎么做的网络的结构
  • 网站开发后端书籍上海 网站建设 外包
  • 公司网站建设公中国建设部网站监理延续
  • 网站路径改版如何做301重定向友情链接赚钱
  • 做拼图字的网站怎么做单页竞价网站
  • 百度创建网站个人网站备案好麻烦哦
  • jquery代码做的网站有哪些做淘宝素材的网站