日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

左右拖動切換圖片效果案例

來源: 責編: 時間:2024-03-18 09:40:45 233觀看
導讀想了解更多關于開源的內容,請訪問:51CTO 鴻蒙開發者社區https://ost.51cto.com介紹本示例使用滑動手勢監聽,實時調整左右兩側內容顯示區域大小和效果。通過綁定gesture事件中的PanGesture平移手勢,實時獲取拖動距離。當拖

v7f28資訊網——每日最新資訊28at.com

想了解更多關于開源的內容,請訪問:v7f28資訊網——每日最新資訊28at.com

51CTO 鴻蒙開發者社區v7f28資訊網——每日最新資訊28at.com

https://ost.51cto.comv7f28資訊網——每日最新資訊28at.com

介紹

本示例使用滑動手勢監聽,實時調整左右兩側內容顯示區域大小和效果。通過綁定gesture事件中的PanGesture平移手勢,實時獲取拖動距離。當拖動時,實時地調節左右兩個Image組件的寬度,從而成功實現左右拖動切換圖片效果的功能。v7f28資訊網——每日最新資訊28at.com

效果圖預覽

v7f28資訊網——每日最新資訊28at.com

使用說明

點擊中間按鈕進行左右拖動切換圖片。v7f28資訊網——每日最新資訊28at.com

實現思路

本例涉及的關鍵特性和實現方案如下:v7f28資訊網——每日最新資訊28at.com

創建三個Stack組件,用來展示裝修前后對比圖,第一個和第三個Stack分別存放裝修前的圖片和裝修后的圖片,zIndex設置為1。第二個Stack存放按鈕的圖片,zIndex設置為2,這樣按鈕的圖片就會覆蓋在兩張裝修圖片之上。
源碼參考DragToSwitchPicturesView.ets。v7f28資訊網——每日最新資訊28at.com

Row() {  Stack() {...}  .zIndex(CONFIGURATION.ZINDEX1)  .width(this.leftImageWidth) // z序設為1,為了使按鈕圖片浮在裝修圖片上。  Stack() {...}  .width($r('app.integer.drag_button_stack_width'))  .zIndex(CONFIGURATION.ZINDEX2) // z序設為2,為了使按鈕圖片浮在裝修圖片上。  Stack() {...}  .zIndex(CONFIGURATION.ZINDEX1) // z序設為1,為了使按鈕圖片浮在裝修圖片上。  .width(this.rightImageWidth)}.justifyContent(FlexAlign.Center).width($r('app.string.full_size'))

將Image組件放在Row容器里,將Row容器的寬度設置為狀態變量,再利用clip屬性對于Row容器進行裁剪。
源碼參考DragToSwitchPicturesView.ets。v7f28資訊網——每日最新資訊28at.com

Row() {  Image($r('app.media.before_decoration'))    .width($r('app.integer.decoration_width'))// Image的width固定,Row的寬度變化,通過裁剪實現布局效果。    .height($r('app.integer.decoration_height'))    .draggable(false) // 設置Image不能拖動,不然長按Image會被拖動。  }  .width(this.leftImageWidth) // 將左側Row的width設置為leftImageWidth,這樣左側Row的width隨leftImageWidth的變化而變化。  .clip(true) // clip屬性設置為true,裁剪超出Row寬度的圖片。  .zIndex(CONFIGURATION.ZINDEX1) // z序設為1,為了使水印浮在裝修圖片上。  .borderRadius({    topLeft: $r('app.integer.borderradius'),    bottomLeft: $r('app.integer.borderradius')  }) // 將Row的左上角和左下角弧度設為10實現效果。

右邊的Image組件與左邊同樣的操作,但是新增了一個direction屬性,使元素從右至左進行布局,為的是讓Row從左側開始裁剪。
源碼參考DragToSwitchPicturesView.ets。v7f28資訊網——每日最新資訊28at.com

Row() { Image($r('app.media.after_decoration'))   .width($r('app.integer.decoration_width'))   .height($r('app.integer.decoration_height'))   .draggable(false)}.width(this.rightImageWidth).clip(true).zIndex(CONFIGURATION.ZINDEX1) // z序設為1,為了使水印浮在裝修圖片上。// TODO: 知識點:左邊Row使用clip時從右邊開始裁剪,加了Direction.Rtl后,元素從右到左布局,右邊Row使用clip時從左邊開始裁剪,這是實現滑動改變視圖內容大小的關鍵。.direction(Direction.Rtl).borderRadius({ topRight: $r('app.integer.borderradius'), bottomRight: $r('app.integer.borderradius')}) // 將Row的右上角和右下角弧度設為10實現效果。

中間的Image組件通過手勢事件中的滑動手勢對Image組件滑動進行監聽,對左右Image組件的寬度進行計算從而重新布局渲染。
源碼參考DragToSwitchPicturesView.ets。v7f28資訊網——每日最新資訊28at.com

Image($r('app.media.drag_button'))  .width($r('app.integer.drag_button_image_width'))  .height($r('app.integer.decoration_height'))  .draggable(false)  .gesture( // TODO: 知識點:拖動手勢事件設置一個手指,滑動的最小距離設置為1vp,實現滑動時按鈕跟手動效。    PanGesture({ fingers: CONFIGURATION.PANGESTURE_FINGERS, distance: CONFIGURATION.PANGESTURE_DISTANCE })      .onActionStart(() => {        this.dragRefOffset = CONFIGURATION.INIT_VALUE; // 每次拖動開始時將圖標拖動的距離初始化。      })      // TODO: 性能知識點: 該函數是系統高頻回調函數,避免在函數中進行冗余或耗時操作,例如應該減少或避免在函數打印日志,會有較大的性能損耗。      .onActionUpdate((event: GestureEvent) => {        // 通過監聽GestureEvent事件,實時監聽圖標拖動距離        this.dragRefOffset = event.offsetX;        this.leftImageWidth = this.imageWidth + this.dragRefOffset;        this.rightImageWidth = CONFIGURATION.IMAGE_FULL_SIZE - this.leftImageWidth;        if (this.leftImageWidth >= CONFIGURATION.LEFT_IMAGE_RIGHT_LIMIT_SIZE) { // 當leftImageWidth大于等于310vp時,設置左右Image為固定值,實現停止滑動效果。          this.leftImageWidth = CONFIGURATION.LEFT_IMAGE_RIGHT_LIMIT_SIZE;          this.rightImageWidth = CONFIGURATION.RIGHT_IMAGE_RIGHT_LIMIT_SIZE;        } else if (this.leftImageWidth <= CONFIGURATION.LEFT_IMAGE_LEFT_LIMIT_SIZE) { // 當leftImageWidth小于等于30vp時,設置左右Image為固定值,實現停止滑動效果。          this.leftImageWidth = CONFIGURATION.LEFT_IMAGE_LEFT_LIMIT_SIZE;          this.rightImageWidth = CONFIGURATION.RIGHT_IMAGE_LEFT_LIMIT_SIZE;        }      })      .onActionEnd((event: GestureEvent) => {        if (this.leftImageWidth <= CONFIGURATION.LEFT_IMAGE_LEFT_LIMIT_SIZE) {          this.leftImageWidth = CONFIGURATION.LEFT_IMAGE_LEFT_LIMIT_SIZE;          this.rightImageWidth = CONFIGURATION.RIGHT_IMAGE_LEFT_LIMIT_SIZE;          this.imageWidth = CONFIGURATION.LEFT_IMAGE_LEFT_LIMIT_SIZE;        } else if (this.leftImageWidth >= CONFIGURATION.LEFT_IMAGE_RIGHT_LIMIT_SIZE) {          this.leftImageWidth = CONFIGURATION.LEFT_IMAGE_RIGHT_LIMIT_SIZE;          this.rightImageWidth = CONFIGURATION.RIGHT_IMAGE_RIGHT_LIMIT_SIZE;          this.imageWidth = CONFIGURATION.LEFT_IMAGE_RIGHT_LIMIT_SIZE;        } else {          this.leftImageWidth = this.imageWidth + this.dragRefOffset; // 滑動結束時leftImageWidth等于左邊原有Width+拖動距離。          this.rightImageWidth = CONFIGURATION.IMAGE_FULL_SIZE - this.leftImageWidth; // 滑動結束時rightImageWidth等于340-leftImageWidth。          this.imageWidth = this.leftImageWidth; // 滑動結束時ImageWidth等于leftImageWidth。        }      })  )

工程結構&模塊類型

dragtoswitchpictures                             // har包   |---common   |   |---Constants.ets                            // 常量類   |---data   |   |---DragToSwitchPicturesData.ets             // 生成模擬數據   |---datasource   |   |---BasicDataSource.ets                      // Basic數據控制器   |   |---DragToSwitchPicturesDataSource.ets       // 左右拖動切換圖片數據控制器   |---mainpage   |   |---DragToSwitchPictures.ets                 // 主頁面   |---model   |   |---DragToSwitchPicturesModule.ets           // 左右拖動切換圖片數據模型   |---view   |   |---DragToSwitchPicturesView.ets             // 左右拖動切換圖片視圖   |   |---DesignCattleView.ets                     // AI設計視圖   |   |---TabsWaterFlowView.ets                    // 瀑布流嵌套Tabs視圖

模塊依賴

routermodulev7f28資訊網——每日最新資訊28at.com

高性能知識點

本例使用了onActionUpdate函數。該函數是系統高頻回調函數,避免在函數中進行冗余或耗時操作,例如應該減少或避免在函數打印日志,會有較大的性能損耗。v7f28資訊網——每日最新資訊28at.com

本示例使用了LazyForEach進行數據懶加載,WaterFlow布局時會根據可視區域按需創建FlowItem組件,并在FlowItem滑出可視區域外時銷毀以降低內存占用。v7f28資訊網——每日最新資訊28at.com

本示例使用了cachedCount設置預加載的FlowItem的數量,只在LazyForEach中生效,設置該屬性后會緩存cachedCount個FlowItem,LazyForEach超出顯示和緩存范圍的FlowItem會被釋放。v7f28資訊網——每日最新資訊28at.com

想了解更多關于開源的內容,請訪問:v7f28資訊網——每日最新資訊28at.com

51CTO 鴻蒙開發者社區v7f28資訊網——每日最新資訊28at.com

https://ost.51cto.comv7f28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-76513-0.html左右拖動切換圖片效果案例

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 實戰 | 生產環境中如何動態調整線程池大小?

下一篇: 2024 年這五個 Node.js 后端框架最受歡迎!

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 得物寵物生意「狂飆」,發力“它經濟”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內的&ldquo;在線鑒別&rdquo;,可找到鑒別寵物的選項。通過上傳自家寵物的部位細節,就能收獲擁有專業資質認證的得物鑒
  • 消費結構調整丨巨頭低價博弈,拼多多還卷得動嗎?

    來源:征探財經作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來越明顯。曾經主攻中高端與品質的淘寶天貓、京東重拾&ldquo;低價&rdquo;口號。而過去與他們錯位競爭的拼多多,靠
  • 認真聊聊東方甄選:如何告別低垂的果實

    來源:山核桃作者:財經無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關心的&ldquo;網紅&rdquo;。7月5日至9日,為期5天的東方甄選&ldquo;甘肅行&rdquo;首次在自有App內直播,
  • 三星Galaxy Z Fold/Flip 5國行售價曝光 :最低7499元/12999元起

    據官方此前宣布,三星將于7月26日也就是明天在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • 蘋果140W USB-C充電器:采用氮化鎵技術

    據10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
  • 中關村論壇11月25日開幕,15位諾獎級大咖將發表演講

    11月18日,記者從2022中關村論壇新聞發布會上獲悉,中關村論壇將于11月25至30日在京舉行。本屆中關村論壇由科學技術部、國家發展改革委、工業和信息化部、國務
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲一区二区免费看| 另类综合日韩欧美亚洲| 亚洲欧洲一区二区天堂久久| 亚洲韩国青草视频| 亚洲乱码国产乱码精品精| 在线亚洲一区观看| 欧美一区二区三区视频| 久久在线免费观看| 欧美日韩精品久久久| 欧美日韩亚洲国产精品| 国产日韩一区| 亚洲破处大片| 亚洲伊人网站| 久久亚洲精品一区二区| 欧美美女操人视频| 国产乱码精品一区二区三区忘忧草| 韩国久久久久| 99热精品在线| 欧美在线影院| 欧美伦理91| 国产婷婷成人久久av免费高清 | 国产精品a级| 国产字幕视频一区二区| 99视频精品全部免费在线| 欧美一区日韩一区| 欧美人在线观看| 国产在线国偷精品产拍免费yy| 亚洲精品美女在线| 久久av资源网站| 欧美精品成人一区二区在线观看 | 日韩特黄影片| 久久精品国产欧美亚洲人人爽| 欧美精品日韩精品| 国内综合精品午夜久久资源| 99热这里只有精品8| 久久亚洲国产精品一区二区| 国产精品美女久久| 亚洲人久久久| 久久美女性网| 国产精品亚洲一区| 亚洲美女av在线播放| 久久久免费av| 国产欧美精品一区| 99精品国产在热久久婷婷| 久久男女视频| 国产女主播视频一区二区| 日韩视频一区二区在线观看| 久久香蕉精品| 国产午夜一区二区三区| 亚洲婷婷综合色高清在线| 欧美韩日视频| 亚洲大黄网站| 久久国产免费看| 国产精品乱子久久久久| 日韩视频亚洲视频| 欧美aⅴ一区二区三区视频| 国产有码一区二区| 亚洲你懂的在线视频| 欧美日韩精品一区二区| 亚洲国产精品女人久久久| 久久国产色av| 国产亚洲精品aa| 午夜在线播放视频欧美| 国产精品大全| 亚洲最新在线| 欧美另类极品videosbest最新版本| 在线日韩中文| 久久亚洲视频| 国内视频一区| 久久精品91| 国产在线视频欧美一区二区三区| 性色av一区二区怡红| 国产精品久久久久久影视 | 亚洲国产精品一区二区尤物区| 久久亚洲春色中文字幕| 狠狠88综合久久久久综合网| 欧美一区二区三区四区夜夜大片| 国产精品免费在线| 亚洲一区二区黄| 国产精品v欧美精品∨日韩| 一本色道久久88综合日韩精品| 欧美激情精品久久久久| 亚洲日本va午夜在线影院| 欧美成人激情在线| 亚洲精品精选| 欧美日韩成人在线| 一区二区三区视频在线播放| 欧美色另类天堂2015| 一区二区三区毛片| 国产精品久久久久久久app| 亚洲一区视频| 国产精品视频免费在线观看| 欧美亚洲视频在线观看| 国内成人精品2018免费看| 久久久久久久性| 在线看一区二区| 欧美经典一区二区| 宅男在线国产精品| 国产毛片一区| 久久久久久久精| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产综合视频| 久久综合色播五月| 最新亚洲激情| 欧美深夜福利| 欧美一级黄色录像| 激情亚洲网站| 欧美精品成人在线| 亚洲一品av免费观看| 国产欧美日韩免费看aⅴ视频| 久久电影一区| 亚洲国产精品久久久久秋霞不卡 | 尤物99国产成人精品视频| 欧美高清视频一区二区| 一区二区三区四区精品| 国产精品推荐精品| 久久蜜桃资源一区二区老牛 | 韩国av一区二区三区四区| 欧美大色视频| 亚洲性感美女99在线| 国产一区清纯| 欧美金8天国| 午夜亚洲视频| 亚洲国产免费看| 国产精品福利网站| 久久久精品免费视频| 亚洲久久在线| 国产欧美精品一区二区色综合 | 老妇喷水一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在| 国产精品每日更新在线播放网址| 欧美一区中文字幕| 亚洲欧洲视频| 国产伦一区二区三区色一情| 蜜臀a∨国产成人精品| 亚洲视频在线播放| 一区二区三区在线视频播放| 欧美日韩国产综合网| 久久国产精品亚洲va麻豆| 日韩一二在线观看| 国产午夜精品视频免费不卡69堂| 欧美韩日一区| 久久九九免费视频| 一区二区三区免费观看| 尹人成人综合网| 国产精品永久免费| 欧美激情综合色综合啪啪| 久久成人免费视频| 在线亚洲一区二区| 亚洲国产日韩在线| 国产亚洲精品久久久久婷婷瑜伽| 欧美激情四色| 久久福利毛片| 国产精品99久久久久久久vr| 在线成人激情黄色| 国产精品美女在线| 欧美理论片在线观看| 久久免费偷拍视频| 亚洲欧美怡红院| 夜夜嗨网站十八久久| 依依成人综合视频| 国产精品婷婷| 欧美色精品在线视频| 模特精品在线| 久久精品中文字幕一区| 亚洲免费网址| 一区二区久久久久| 亚洲人成网站影音先锋播放| 国产午夜精品全部视频播放| 国产精品sss| 欧美日韩国产91| 免费国产一区二区| 久久九九热免费视频| 亚洲欧洲av一区二区| 99精品福利视频| 136国产福利精品导航网址| 国产欧美精品一区二区三区介绍| 欧美性感一类影片在线播放| 欧美精品在线视频观看| 久久综合福利| 久久久久高清| 欧美在线综合| 欧美尤物巨大精品爽| 亚洲欧美日韩国产综合| 一区二区三区国产在线观看| 亚洲欧洲在线一区| 亚洲国产精品一区二区www| 激情欧美一区二区三区| 国产欧美一区二区色老头| 国产精品色午夜在线观看| 欧美香蕉视频| 国产精品久久久久久久一区探花| 欧美午夜片在线免费观看| 欧美日韩视频在线一区二区观看视频 | 欧美在线黄色| 新片速递亚洲合集欧美合集| 亚洲午夜激情网页| 制服丝袜激情欧洲亚洲| 一区二区三区国产精华| 一本色道久久加勒比88综合| 一区二区三区精品视频在线观看 | 麻豆久久精品| 免费看亚洲片| 欧美大胆成人|