【每日学点HarmonyOS Next知识】手写电子签名、瀑布流布局获取字符串高度、WaterFlow崩溃、Web滑动问题
【每日学点HarmonyOS Next知识】手写电子签名、瀑布流布局获取字符串高度、WaterFlow崩溃、Web滑动问题
1、HarmonyOS 是否有手写电子签名 然后生成图片的demo?
是否有手写电子签名 然后生成图片的demo,希望能提供一个
可以参考:https://gitee.com/harmonyos-cases/cases/tree/master/CommonAppDevelopment/feature/handwritingtoimage
2、HarmonyOS 瀑布流布局获取字符串高度?
可以使用组件区域事件onAreaChange(event: (oldValue: Area, newValue: Area) => void)来获取Text组件的整体高度
参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-component-area-change-event-V5#onareachange
onAreaChange(event: (oldValue: Area, newValue: Area) => void): T
组件区域变化时触发该回调。仅会响应由布局变化所导致的组件大小、位置发生变化时的回调。
由绘制变化所导致的渲染属性变化不会响应回调,如translate、offset。若组件自身位置由绘制变化决定也不会响应回调,如bindSheet。
3、HarmonyOS 使用WaterFlow 结合WaterFlowSection过程中发生崩溃?
使用WateFlow + WaterFlowSection 过程中,将它作为PicturePullDownRefresh 的customList 时,在初始化展示过程中发生崩溃。
将WaterFlowSource.ets页面的 let r = this.mSections.update(index, update)改为let r = this.mSections.splice(index, 1, [update])
,可以解决问题
4、HarmonyOS Web组件嵌套滚动 当web 内容超过屏幕长度,web底部的内容无法滑动联动?
固定头部和底部,在最外层的Column加一个内部高度
Column() {
///
}.width('100%').padding({bottom: 40})
头部和底部跟着web内容滚动, 就把头部和底部, 放到Scroll组件里面
Web({
src: $rawfile("aa.html"),
controller: this.controller,
renderMode: RenderMode.SYNC_RENDER
})
.layoutMode(WebLayoutMode.FIT_CONTENT)
.width("100%")
.zoomAccess(false)
.nestedScroll({
scrollForward: NestedScrollMode.SELF_FIRST,
scrollBackward: NestedScrollMode.SELF_FIRST,
})
5、HarmonyOS NodeController的onTouchEvent函数中无法获取到this?
使用了QueryImageNodeController继承自NodeController,QueryImageNodeController中维护了一个nodeArray,点击后onTouchEvent被回调,发生崩溃Cannot read property nodeArray of undefined,为什么获取不到this?如果获取不到this,无法在onTouchEvent完成点击后的一些操作。
参考demo:
export class QueryImageNodeController extends NodeController {
private rootNode?: FrameNode
private nodeArray: Array<ImageNode> = []
queryImageTouchCallBack?: QueryImageTouchCallBack
makeNode(uiContext: UIContext): FrameNode {
this.rootNode = new FrameNode(uiContext)
const rootRenderNode = this.rootNode.getRenderNode()
if (rootRenderNode) {
this.nodeArray.forEach((item) => {
rootRenderNode.appendChild(item.renderNode)
})
}
return this.rootNode
}
onTouchEvent?(event: TouchEvent): void {
let that = this
if (event.type === TouchType.Down) {
if (event.touches.length > 0) {
const lastTouch = event.touches[event.touches.length - 1]
let x = lastTouch.x
let y = lastTouch.y
this.nodeArray.forEach((node, index) => { // this是undefined,无法获取到当前类的一些参数<---------
let box = node.boxItem?.box
if (!box) {
return
}
if (x > box.x1 && x < box.x2 && y > box.y1 && y < box.y3) {
that.queryImageTouchCallBack?.onRectTouch(node.boxItem?.questionIndex ?? 0)
}
})
}
}
}
}