HarmonyOS 实现手账、便签的功能

1.实现逻辑 :定义根视图容器,在容器内添加自定义View, 结合手势操作,可对视图移动,缩放、删除、旋转、增加文字等操作

2.实现对文字的属性设置,如字体、大小、斜体、加粗、下划线,并且可以局部设置。

HarmonyOS
2024-09-26 13:02:34
浏览
已于2024-9-26 17:36:15修改
收藏 0
回答 1
回答 1
按赞同
/
按时间
zxjiu

问题1:可动态创建和渲染组件的方式实现添加组件,在组件中绑定相关的手势实现

添加手势可参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-gesture-events-single-gesture-V5

键代码demo如下:

//Editor.ets  
import TestDragText from './TestDragText';  
interface ItemProperty {  
  type: string;  
}  
@Entry  
@Component  
struct EditTab {  
  @State components: Array<ItemProperty> = [];  
  @Builder builderComponent(type: string) {  
    Column() {  
      if (type === 'DragText') {  
        TestDragText();  
      }  
    }.width("100%")  
    .justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center)  
  }  
  build() {  
    Column() {  
      Row() {  
        Button('添加拖拽组件').onClick(() => {  
          this.components.push({type: 'DragText'})  
        })  
      }  
      Scroll() {  
        Column({ }) {  
          Column() {  
            ForEach(this.components, (item: (ItemProperty)) => {  
              this.builderComponent(item.type);  
            })  
          }  
          .width("")  
          .alignItems(HorizontalAlign.Start)  
        }  
      }.scrollBarWidth(0)  
      .height('80%')  
    }  
  }  
}  
//TestDragText:  
@Component  
export default struct TestDragText {  
  @State offsetX: number = 0;  
  @State offsetY: number = 0;  
  @State positionX: number = 0;  
  @State positionY: number = 0;  
  
  build() {  
    Column() {  
      Text('PanGesture Offset:\nX: ' + this.offsetX + '\n' + 'Y: ' + this.offsetY)  
        .fontSize(28)  
        .height(200)  
        .width(300)  
        .padding(20)  
        .border({ width: 3 })  
          // 在组件上绑定布局位置信息  
        .translate({ x: this.offsetX, y: this.offsetY, z: 0 })  
        .gesture(  
          // 绑定拖动手势  
          PanGesture()  
            .onActionStart((event: GestureEvent|undefined) => {  
              console.info('Pan start');  
            })  
              // 当触发拖动手势时,根据回调函数修改组件的布局位置信息  
            .onActionUpdate((event: GestureEvent|undefined) => {  
              if(event){  
                this.offsetX = this.positionX + event.offsetX;  
                this.offsetY = this.positionY + event.offsetY;  
              }  
            })  
            .onActionEnd(() => {  
              this.positionX = this.offsetX;  
              this.positionY = this.offsetY;  
            })  
        )  
    }  
    .height(200)  
    .width(250)  
  }  
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.

问题2:文本相关的编辑可参考RichEditor组件:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-richeditor-V5

分享
微博
QQ
微信
回复
2024-09-26 15:37:01
相关问题
HarmonyOS 虚线功能实现
800浏览 • 1回复 待解决
Martix实现倾斜功能
1153浏览 • 1回复 待解决
HarmonyOS 如何实现语音助手功能
1175浏览 • 1回复 待解决
HarmonyOS 分享功能如何实现
957浏览 • 1回复 待解决
HarmonyOS 换肤功能怎么实现
1498浏览 • 1回复 待解决
HarmonyOS 实现RSA加密功能
1063浏览 • 1回复 待解决
HarmonyOS AtomicInteger 计数功能实现
768浏览 • 1回复 待解决
HarmonyOS 如何实现轮询功能
969浏览 • 1回复 待解决
HarmonyOS 如何实现ImagePreview功能
687浏览 • 1回复 待解决
HarmonyOS 如何实现可展开listview功能
544浏览 • 1回复 待解决
harmonyos中如何实现精准定位功能
215浏览 • 0回复 待解决
如何实现类似插槽功能
2768浏览 • 1回复 待解决
鸿蒙截图功能实现问题
11438浏览 • 1回复 待解决
HarmonyOS 如何实现扫脸登录功能
748浏览 • 1回复 待解决
HarmonyOS 如何实现popupwindow功能
736浏览 • 1回复 待解决
HarmonyOS 曝光功能如何实现
906浏览 • 1回复 待解决
HarmonyOS 如何实现DeepLink功能
901浏览 • 1回复 待解决
HarmonyOS 如何实现直播功能
1013浏览 • 1回复 待解决