鴻蒙繪制凹形布局秽之,滑動進(jìn)行大小重繪

當(dāng)系統(tǒng)布局無法滿足需求的時候,就需要自己繪制了豺裆,我的需求是繪制如下圖拒秘,且跟跟隨上下滑動調(diào)整凹形大小号显。


snapshot_2024-11-11_10-33-59 拷貝.png

布局分析

對關(guān)鍵點(diǎn)拆分如下圖:


image.png
  1. 三個一樣大小的圓
  • 進(jìn)行外切
  1. 中間的凹形
  • DG弧度繪制
  • AD/GE弧度繪制
  1. 上下滑動凹形大小尺寸變化
  • 通過官網(wǎng)查詢,最合適是使用Canvas躺酒,但Canvas.onReady只繪制一次押蚤,可以通過@Watch監(jiān)聽變量(圓的直徑)大小變化解決

用到的知識

1. 勾股定理

在平面上的一個直角三角形中,兩個直角邊邊長的平方加起來等于斜邊長的平方羹应。如果設(shè)直角三角形的兩條直角邊長度分別是和揽碘,斜邊長度是,那么可以用數(shù)學(xué)語言表達(dá):


image.png

2. 弧度與角度轉(zhuǎn)化

弧度與角度轉(zhuǎn)換公式
1)將弧度轉(zhuǎn)換為角度:乘以 180园匹,除以 π
2)將角度轉(zhuǎn)換為弧度:乘以 π雳刺,除以 180

這是弧度與角度的對照列表:

角度 弧度(精確) 弧度(近似)
30° π/6 0.524
45° π/4 0.785
60° π/3 1.047
90° π/2 1.571
180° π 3.142
270° 3π/2 4.712
360° 6.283

布局開始繪制

對于以上的布局分析,可以知道裸违,布局繪制掖桦,其實(shí)畫三個弧線就可以完成了,代碼如下:

// AD左上弧-起始角度270供汛,終點(diǎn)角度330
this.context.arc(centerX - mar, radius, radius, 270 * Math.PI / 180, 330 * Math.PI / 180)
// DG底部弧-起始角度150枪汪,終點(diǎn)角度30
this.context.arc(centerX, 0, radius, 150 * Math.PI / 180, 30 * Math.PI / 180, true)
// GE右上弧-起始角度210,終點(diǎn)角度270
this.context.arc(centerX + mar, radius, radius, 210 * Math.PI / 180, 270 * Math.PI / 180)

完整代碼如下

// 上下滑動修改fabSize的大小紊馏,使Canvas重新繪制
@State @Watch('drawBottomBar') fabSize: number = 80

drawBottomBar() {
    let width = this.context.width
    let height = this.context.height
    // 刪除之前繪制的料饥,重新繪制
    this.context.clearRect(0, 0, width, height)
    this.context.beginPath()

    let centerX = width / 2
    let radius = this.fabSize / 2
    // AB/BE的距離
    let mar = Math.sqrt(Math.pow(this.fabSize, 2) - Math.pow(radius, 2))
    // 左上直線
    this.context.lineTo(centerX - mar, 0)
    // AD左上弧-起始角度270,終點(diǎn)角度330
    this.context.arc(centerX - mar, radius, radius, 270 * Math.PI / 180, 330 * Math.PI / 180)
    // DG底部弧-起始角度150朱监,終點(diǎn)角度30
    this.context.arc(centerX, 0, radius, 150 * Math.PI / 180, 30 * Math.PI / 180, true)
    // GE右上弧-起始角度210,終點(diǎn)角度270
    this.context.arc(centerX + mar, radius, radius, 210 * Math.PI / 180, 270 * Math.PI / 180)
    // 右上直線
    this.context.lineTo(width, 0)
    // 右下直線
    this.context.lineTo(width, height)
    // 底部直線
    this.context.lineTo(0, height)
    // 閉合
    this.context.closePath()
    // 顏色
    this.context.fillStyle = '#344955'
    // 填充
    this.context.fill()
}

build() {
    Stack() {
      Canvas(this.context)
        .height(80)
        .width('100%')
        .onReady(() => {
          this.drawBottomBar()
        })
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末原叮,一起剝皮案震驚了整個濱河市赫编,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奋隶,老刑警劉巖擂送,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異唯欣,居然都是意外死亡嘹吨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門境氢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蟀拷,“玉大人,你說我怎么就攤上這事萍聊∥史遥” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵寿桨,是天一觀的道長此衅。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么挡鞍? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任骑歹,我火速辦了婚禮,結(jié)果婚禮上墨微,老公的妹妹穿的比我還像新娘道媚。我一直安慰自己,他們只是感情好欢嘿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布衰琐。 她就那樣靜靜地躺著,像睡著了一般炼蹦。 火紅的嫁衣襯著肌膚如雪羡宙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天掐隐,我揣著相機(jī)與錄音狗热,去河邊找鬼。 笑死虑省,一個胖子當(dāng)著我的面吹牛匿刮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播探颈,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼熟丸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伪节?” 一聲冷哼從身側(cè)響起光羞,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怀大,沒想到半個月后纱兑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡化借,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年潜慎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓖康。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡铐炫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钓瞭,到底是詐尸還是另有隱情驳遵,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布山涡,位于F島的核電站堤结,受9級特大地震影響唆迁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜竞穷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一唐责、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘾带,春花似錦鼠哥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至允蚣,卻和暖如春于颖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嚷兔。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工森渐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人冒晰。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓同衣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親壶运。 傳聞我的和親對象是個殘疾皇子耐齐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容