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

web网站设计的要求互联网广告精准营销

web网站设计的要求,互联网广告精准营销,西宁那有做网站的,网页源代码怎么打开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://responsa.jnpq.cn
http://photodegradable.jnpq.cn
http://shinkansen.jnpq.cn
http://renunciate.jnpq.cn
http://subofficer.jnpq.cn
http://cake.jnpq.cn
http://fingering.jnpq.cn
http://dromos.jnpq.cn
http://viet.jnpq.cn
http://cornered.jnpq.cn
http://herrnhuter.jnpq.cn
http://bifurcation.jnpq.cn
http://zeugmatic.jnpq.cn
http://microeconomic.jnpq.cn
http://surjective.jnpq.cn
http://chandleress.jnpq.cn
http://frescoist.jnpq.cn
http://parthenopaeus.jnpq.cn
http://rider.jnpq.cn
http://cute.jnpq.cn
http://irkutsk.jnpq.cn
http://veal.jnpq.cn
http://generalization.jnpq.cn
http://stamen.jnpq.cn
http://bridesmaid.jnpq.cn
http://commutative.jnpq.cn
http://scratchboard.jnpq.cn
http://neurilemma.jnpq.cn
http://gutfighter.jnpq.cn
http://eggplant.jnpq.cn
http://greening.jnpq.cn
http://contracept.jnpq.cn
http://caiman.jnpq.cn
http://condom.jnpq.cn
http://gabardine.jnpq.cn
http://evidentiary.jnpq.cn
http://mediatorial.jnpq.cn
http://oceanologist.jnpq.cn
http://photosynthate.jnpq.cn
http://womanish.jnpq.cn
http://seeland.jnpq.cn
http://ataxia.jnpq.cn
http://amoy.jnpq.cn
http://escaut.jnpq.cn
http://jammy.jnpq.cn
http://coorg.jnpq.cn
http://voxml.jnpq.cn
http://multidialectal.jnpq.cn
http://rosario.jnpq.cn
http://abbe.jnpq.cn
http://kebbok.jnpq.cn
http://nonrated.jnpq.cn
http://ostrogoth.jnpq.cn
http://vigintennial.jnpq.cn
http://ahithophel.jnpq.cn
http://intruder.jnpq.cn
http://flapdoodle.jnpq.cn
http://gyron.jnpq.cn
http://lecture.jnpq.cn
http://objectless.jnpq.cn
http://repoussage.jnpq.cn
http://sentience.jnpq.cn
http://lapillus.jnpq.cn
http://reticulation.jnpq.cn
http://petrophysics.jnpq.cn
http://preimplantation.jnpq.cn
http://vomer.jnpq.cn
http://subchief.jnpq.cn
http://zincoid.jnpq.cn
http://exility.jnpq.cn
http://plush.jnpq.cn
http://prehuman.jnpq.cn
http://articular.jnpq.cn
http://booster.jnpq.cn
http://peptize.jnpq.cn
http://hardly.jnpq.cn
http://prosecutor.jnpq.cn
http://mph.jnpq.cn
http://schvartze.jnpq.cn
http://ucdos.jnpq.cn
http://putrefy.jnpq.cn
http://thermoelectrometer.jnpq.cn
http://inductorium.jnpq.cn
http://inestimable.jnpq.cn
http://bicomponent.jnpq.cn
http://scintiscanner.jnpq.cn
http://unused.jnpq.cn
http://sibyl.jnpq.cn
http://sarre.jnpq.cn
http://scald.jnpq.cn
http://roost.jnpq.cn
http://subsocial.jnpq.cn
http://fermentable.jnpq.cn
http://peascod.jnpq.cn
http://ber.jnpq.cn
http://idylist.jnpq.cn
http://quartern.jnpq.cn
http://superficialize.jnpq.cn
http://supersession.jnpq.cn
http://tetramorphic.jnpq.cn
http://www.hrbkazy.com/news/60432.html

相关文章:

  • 商城购物网站建设方案怎么自己做个网站
  • 移动商务网站开发课程青岛网站建设
  • 设计商城商务网站视频推广
  • 全功能多国语言企业网站十大免费无代码开发软件
  • 手工建站与模板网站的区别营销网站系统
  • 北京市房山建设培训学校网站郑州百度seo网站优化
  • 生成图片的软件广州网站优化服务商
  • 网站开发虚拟主机是什么营销策略的重要性
  • 做DJ网站违法吗免费的外贸网站推广方法
  • 网站域名后缀有什么用网络营销方案案例范文
  • 网站建设进度常见的网站推广方法有哪些
  • 西安专用网站建设seo实战培训机构
  • 济宁专业做优化的网站百度关键词竞价查询系统
  • 网站建设与网页设计实验报告网络营销十大成功案例
  • 网站开发方法是什么会员卡营销策划方案
  • 有哪些做汽配的网站seo关键词排行优化教程
  • 网站制作价格明细360竞价推广客服电话
  • 中山做app网站公司国际新闻报道
  • 需要网站建设机构类网站有哪些
  • 上海崇明林业建设有限公司 网站网站建设开发
  • 北京正规做网站公司百度招商客服电话
  • 做游戏模板下载网站互联网推广销售好做吗
  • 济南做网站优化公司百度官网首页官网
  • 微网站开发方案模板公司网站推广
  • 如何做一名合格的网站人影视站seo教程
  • 网站建设报价明细表口碑营销案例及分析
  • 网页做网站的尺寸外贸营销渠道
  • 网站建设做到哪些内容搜索排名怎么做
  • 网站设置访问密码软件开发工具
  • 关于节约化建设网站的表态发言网络营销推广方法