自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HarmonyOS實戰(zhàn)—實現(xiàn)抖音點贊和取消點贊效果

系統(tǒng) OpenHarmony
鴻蒙HarmonyOS是面向多智能終端、全場景的分布式操作系統(tǒng),為消費者提供跨終端、全場景智慧時代的無縫體驗。

[[416604]]

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

一、雙擊點贊 和 雙擊取消點贊

如:在抖音中雙擊屏幕之后就可以點贊,小紅心就會變亮。

把白色和紅色的心形圖片復制到 media 下

需要圖片的可以自取,下面白色圖片由于沒有背景,所以顯示的是白色的,下載后鼠標點擊就能看見了

因為要雙擊屏幕才能點贊,所以還要給布局組件id

代碼實現(xiàn):

ability_main

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <DirectionalLayout 
  3.     ohos:id="$+id:dl" 
  4.     xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  5.     ohos:height="match_parent" 
  6.     ohos:width="match_parent" 
  7.     ohos:alignment="center" 
  8.     ohos:orientation="vertical"
  9.  
  10.     <Image 
  11.         ohos:id="$+id:img" 
  12.         ohos:height="match_content" 
  13.         ohos:width="match_content" 
  14.         ohos:image_src="$media:white" 
  15.         ohos:background_element="cyan" 
  16.         > 
  17.  
  18.     </Image> 
  19.  
  20.  
  21.  
  22. </DirectionalLayout> 

MainAbilitySlice

  1. package com.xdr630.listenerapplication6.slice; 
  2.  
  3. import com.xdr630.listenerapplication6.ResourceTable; 
  4. import ohos.aafwk.ability.AbilitySlice; 
  5. import ohos.aafwk.content.Intent; 
  6. import ohos.agp.components.Component; 
  7. import ohos.agp.components.DirectionalLayout; 
  8. import ohos.agp.components.Image; 
  9.  
  10. public class MainAbilitySlice extends AbilitySlice implements Component.DoubleClickedListener { 
  11.  
  12.     Image image; 
  13.  
  14.     @Override 
  15.     public void onStart(Intent intent) { 
  16.         super.onStart(intent); 
  17.         super.setUIContent(ResourceTable.Layout_ability_main); 
  18.  
  19.         //1.找到圖片組件 
  20.         image = (Image) findComponentById(ResourceTable.Id_img); 
  21.         //找到鋪滿屏幕布局的對象 
  22.         DirectionalLayout dl = (DirectionalLayout) findComponentById(ResourceTable.Id_dl); 
  23.         //2.給布局添加雙擊事件 
  24.         dl.setDoubleClickedListener(this); 
  25.     } 
  26.  
  27.     @Override 
  28.     public void onActive() { 
  29.         super.onActive(); 
  30.     } 
  31.  
  32.     @Override 
  33.     public void onForeground(Intent intent) { 
  34.         super.onForeground(intent); 
  35.     } 
  36.  
  37.     //如果標記為false,表示沒有點贊,此時把白色變?yōu)榧t色 
  38.     //如果標記為true,表示已經(jīng)點贊,再次雙擊后,會把紅色變回白色 
  39.  
  40.     boolean flag = false
  41.  
  42.     @Override 
  43.     public void onDoubleClick(Component component) { 
  44.         //修改圖片的紅星就可以了,只需要用到image就行了,所以把image定為成員變量 
  45.  
  46.         if (flag){ 
  47.             image.setImageAndDecodeBounds(ResourceTable.Media_white); 
  48.             //取消點贊變成白色,也要把flag設置為false 
  49.             flag = false
  50.         }else
  51.             image.setImageAndDecodeBounds(ResourceTable.Media_red); 
  52.             //當啟動項目的時候,flag初始值是false,就會走下面的else的代碼,變成紅色后就要把flag變成true了 
  53.             flag = true
  54.         } 
  55.     } 

運行:

雙擊屏幕點贊:

雙擊屏幕后取消點贊:

二、能否按照抖音的業(yè)務去實現(xiàn)呢?

業(yè)務分析:

  • 雙擊屏幕之后點贊。(上面已實現(xiàn)),再次雙擊屏幕之后,不會取消點贊,只有點擊后紅心之后才能取消點贊。
  • 單擊紅心也可以點贊,再次單擊紅心就會取消點贊

實現(xiàn)思路:

1.給最外層的布局添加雙擊事件,雙擊之后點贊,變成紅色心。

如果已經(jīng)被點贊,那么還是修改為紅色心,相當于不做任何處理。

2.給圖片添加單擊事件。

如果沒有點贊,單擊之后,白色心變成紅色心。

如果已經(jīng)點贊了,單擊之后,紅色心變成白色心。

代碼實現(xiàn):

上面布局文件不變,MainAbilitySlice 如下:

  • 給布局添加雙擊事件,因為再次雙擊不會取消點贊,所以把else代碼里設置為紅色后就把 flag 取反去掉,就不會出現(xiàn)再次雙擊取消點贊了。
  • 給圖片添加單擊事件,因為涉及到點贊后為紅色,再取消就變?yōu)榘咨?,所以要?flag 變?yōu)橄喾吹牟僮?/li>
  1. package com.xdr630.listenerapplication6.slice; 
  2.  
  3. import com.xdr630.listenerapplication6.ResourceTable; 
  4. import ohos.aafwk.ability.AbilitySlice; 
  5. import ohos.aafwk.content.Intent; 
  6. import ohos.agp.components.Component; 
  7. import ohos.agp.components.DirectionalLayout; 
  8. import ohos.agp.components.Image; 
  9.  
  10. public class MainAbilitySlice extends AbilitySlice implements Component.DoubleClickedListener, Component.ClickedListener { 
  11.  
  12.     Image image; 
  13.  
  14.     @Override 
  15.     public void onStart(Intent intent) { 
  16.         super.onStart(intent); 
  17.         super.setUIContent(ResourceTable.Layout_ability_main); 
  18.  
  19.         //1.找到圖片組件 
  20.         image = (Image) findComponentById(ResourceTable.Id_img); 
  21.         //找到鋪滿屏幕布局的對象 
  22.         DirectionalLayout dl = (DirectionalLayout) findComponentById(ResourceTable.Id_dl); 
  23.         //2.給布局添加雙擊事件 
  24.         dl.setDoubleClickedListener(this); 
  25.         //3.給圖片添加單擊事件 
  26.         image.setClickedListener(this); 
  27.     } 
  28.  
  29.     @Override 
  30.     public void onActive() { 
  31.         super.onActive(); 
  32.     } 
  33.  
  34.     @Override 
  35.     public void onForeground(Intent intent) { 
  36.         super.onForeground(intent); 
  37.     } 
  38.  
  39.     //如果標記為false,表示沒有點贊,此時把白色變?yōu)榧t色 
  40.     //如果標記為true,表示已經(jīng)點贊,再次雙擊后,會把紅色變回白色 
  41.  
  42.     boolean flag = false
  43.  
  44.  
  45.     @Override 
  46.     public void onDoubleClick(Component component) { 
  47.         //修改圖片的紅星就可以了,只需要用到image就行了,所以把image定為成員變量 
  48.  
  49.         if (flag){ 
  50.             image.setImageAndDecodeBounds(ResourceTable.Media_white); 
  51.             //取消點贊變成白色,也要把flag設置為false 
  52.             flag = false
  53.         }else
  54.             image.setImageAndDecodeBounds(ResourceTable.Media_red); 
  55.             //當啟動項目的時候,flag初始值是false,就會走下面的else的代碼,此時設置為紅色,把flag去掉,再次雙擊后就還是紅色了 
  56.         } 
  57.     } 
  58.  
  59.     @Override 
  60.     public void onClick(Component component) { 
  61.         if (flag){ 
  62.             image.setImageAndDecodeBounds(ResourceTable.Media_white); 
  63.             flag = false
  64.         }else
  65.             image.setImageAndDecodeBounds(ResourceTable.Media_red); 
  66.             flag = true
  67.         } 
  68.     } 

運行:

單擊紅心后:

再次單擊紅心:

雙擊屏幕后效果如下,再次雙擊屏幕就不會取消點贊了,只有點擊小紅心才能取消點贊

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2020-01-10 15:15:53

Redis點贊數(shù)據(jù)庫

2015-07-17 10:41:59

點贊按鈕

2020-12-03 11:00:29

Spring ClouRedis數(shù)據(jù)庫

2021-04-14 14:28:14

Python點攢抖音

2022-08-11 09:30:52

transitionCSS

2020-05-11 17:00:30

點贊MySQLRedis

2018-05-10 16:47:10

戴爾

2015-07-21 15:22:20

點贊仿知乎按鈕動畫

2020-02-10 16:02:29

東華軟件

2018-03-06 11:25:04

漫游流量運營商

2024-10-29 11:19:23

點贊系統(tǒng)同步

2019-08-27 08:51:36

計數(shù)數(shù)據(jù)庫并發(fā)

2015-06-02 10:22:43

CDN/Webluke

2025-04-14 07:00:00

GenAI網(wǎng)絡安全釣魚郵件

2018-03-09 10:20:45

安卓Android P系統(tǒng)

2024-02-01 13:02:00

AI模型

2022-08-22 20:10:59

自定義計數(shù)器CSS

2020-09-17 18:31:54

戴爾

2017-11-13 10:56:46

2019-12-02 09:58:04

點贊
收藏

51CTO技術(shù)棧公眾號