成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

2020征文-TV「續3.1.1 文本組件」不需要背景圖,自定義繪制會更好

開發 前端
本小節我們對ShapeElement類做具體介紹,在后面的組件中將不在詳細介紹,可以根據本節內容自定義不同樣式的組件。對于ShapeElement類中的另外兩個繪制幾何圖形的方法,我將在后面的小節中單獨介紹。

 [[356867]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

上節我們對Text組件有了詳細的認知,我們可以通過設置Text組件的各類屬性來讓Text組件美觀起來,但是我們僅僅能設置背景、字體大小、字體大小自適應、內容折行、外邊距、內邊距等。很多時候我們想給字體設置邊框、圓角、陰影等等特殊的效果,但是在屬性中沒有特定的屬性可以完成這件事。當然我們可以給Text組件設置背景圖片,這樣也可以達到我們的預期效果,但是如果整個APP中圖片比較多會增加我們安裝包的體積,還會在各種手機的適配上出現不可預知的問題。

官方團隊提供了一個可以繪制帶有顏色、漸變、邊框,用于視圖背景的,及設置各種形狀的類—ShapeElement。

ShapeElement類源碼

ShapeElement類是Element的子類,Element類有多個擴展類,這里就不詳細說明了,后面我們在需要的時候再擴展講解。目前Java API中提供了多個常量值,兩個構造函數,以及多個繪圖方法。

我們先來了解一下能夠設置哪些形狀?

ShapeElement類提供了設置矩形、橢圓形、直線、圓弧和路徑(以直線段、二次曲線和三次曲線的幾何組合表示多輪廓路徑)。本節僅對前三個幾何圖形做介紹,后兩個后面小節會詳細介紹。

  1. /** 
  2.   * 繼承自Element,提供了帶有顏色漸變的可繪制實例,通常用于視圖背景 
  3.   */ 
  4. public class ShapeElement extends Element { 
  5.     // 可繪制的幾何圖形 
  6.     // 繪制形狀為矩形 
  7.     public static final int RECTANGLE = 0; 
  8.     // 繪制形狀為橢圓 
  9.     public static final int OVAL = 1; 
  10.     // 繪制形狀為直線 
  11.     public static final int LINE = 2; 
  12.      
  13.     //默認構造器,在代碼中設定幾何圖形和背景的話,使用這個構造函數 
  14.     public ShapeElement() {} 
  15.     //引用資源文件中設定的幾何圖形和背景的話,使用這個構造函數 
  16.     //xmlId為資源文件的內存地址 
  17.     public ShapeElement(Context context, int xmlId) {} 
  18.      
  19.     //設置要顯示的集合圖形,參數為上面的靜態常量 
  20.     public void setShape(int shape) {} 
  21.     //設置背景顏色 
  22.     public void setRgbColor(RgbColor color) {} 
  23.     //設置漸變效果填充的顏色值,參數為顏色數組,對直線無效 
  24.     public void setRgbColors(RgbColor[] colors) {} 
  25.     //設置邊框的寬度和顏色 
  26.     public void setStroke(int width, RgbColor color) {} 
  27.     //設置圓角半徑,這個方法僅對矩形有效 
  28.     public void setCornerRadius(float radius) {} 
  29.     //設置每個角的半徑,這個方法僅對矩形有效 
  30.     //表示四個角的半徑數組。如果數組的長度不等于8,則該設置無效。 
  31.     // 每對半徑表示一個角的x軸半徑和y軸半徑。 
  32.     public void setCornerRadiiArray(float[] radii) {} 
  33.     //指定組件的漸變效果方向 
  34.     public void setOrientation(ShapeElement.Orientation orientation) {} 
  35.     public void setGradientOrientation(ShapeElement.Orientation orientation) {} 
  36.     //設置虛線的間隔和相位 
  37.     //數組項是成對的:這些值的偶數和奇數索引分別指定要繪制的象素個數和空白象素個數。 
  38.     public void setDashPathEffectValues(float[] intervals, float phase) {} 

 ShapeElement實例應用

上面我們將常用的源碼做了簡單分析,接下來我們將以實操為主,能夠熟練掌握ShapeElement的應用。

我們先來看看上面的UI界面,上面有三種自定義文本顯示,矩形、橢圓形、直線。而OHOS還提供了圓弧和基于路徑的多形狀圖。在矩形中,我們分別實現了默認的矩形背景,四角相同的圓角矩形背景,四角不同的圓角矩形背景,實線邊框的矩形背景,虛線邊框的矩形背景,橢圓背景,圓形背景,及直線背景。

首先我們先了解一下,我們為何使用這種類型的背景。

1、給app瘦身,可以替代純色和漸變色的組件背景

2、編寫一個矩形、圓、橢圓,便于維護,只需要改動少量代碼即可實現效果

3、節省內存

這些設置背景的圖形和背景色在ShapeElement類中,ShapeElement類是Element類的子類,該類用于實現帶有漸變效果的圖形化視圖背景。其提供了矩形、橢圓形、直線、圓弧和基于路徑的多形狀圖,本節我們先來對矩形、橢圓形和直線做示例介紹,后兩種我們在后續開專門的小節做詳細介紹。

矩形

矩形是常見的視圖背景,我們可以設置默認的矩形、帶圓角的矩形、帶邊框的矩形。

  1. //矩形背景 
  2. DirectionalLayout rectangle_layout = initChildDirectionalLayout(this); 
  3.  
  4. //這個組件顯示的效果是"帶背景的矩形" 
  5. Text rectangle_background_text = initText(this, "帶背景的矩形"); 
  6. //設置背景色 
  7. ShapeElement rectangle_background_text_element = initChildShapeElement(this); 
  8. rectangle_background_text_element.setShape(ShapeElement.RECTANGLE); 
  9. rectangle_background_text.setBackground(rectangle_background_text_element); 
  10. rectangle_layout.addComponent(rectangle_background_text); 
  11.  
  12. //這個組件顯示的效果是"帶背景和圓角的矩形" 
  13. Text rectangle_background_radius_text = initText(this, "帶背景和圓角的矩形"); 
  14. //設置背景色和圓角 
  15. ShapeElement rectangle_background_radius_text_element = initChildShapeElement(this); 
  16. rectangle_background_radius_text_element.setShape(ShapeElement.RECTANGLE); 
  17. rectangle_background_radius_text_element.setCornerRadius(20); 
  18. rectangle_background_radius_text_element.setDashPathEffectValues(new float[]{20f, 25f, 30f, 35f}, 2); 
  19. rectangle_background_radius_text.setBackground(rectangle_background_radius_text_element); 
  20. rectangle_layout.addComponent(rectangle_background_radius_text); 
  21.  
  22. //這個組件顯示的效果是"帶背景和四角不同圓角的矩形" 
  23. Text rectangle_background_different_radius_text = initText(this, "帶背景和不同圓角的矩形"); 
  24. //設置背景色和每個角的圓角 
  25. ShapeElement rectangle_background_different_radius_text_element = initChildShapeElement(this); 
  26. rectangle_background_different_radius_text_element.setShape(ShapeElement.RECTANGLE); 
  27. rectangle_background_different_radius_text_element.setCornerRadiiArray(new float[]{20, 40, 30, 60, 20, 20, 100, 120}); 
  28. rectangle_background_different_radius_text.setBackground(rectangle_background_different_radius_text_element); 
  29. rectangle_layout.addComponent(rectangle_background_different_radius_text); 
  30.  
  31.  
  32. //這個組件顯示的效果是"漸變背景"矩形 
  33. Text gradient_background_text = initText(this, "帶漸變效果的矩形背景"); 
  34. //設置背景色和漸變(從下端角到上端角) 
  35. ShapeElement gradient_background_text_element = initChildShapeElement(this); 
  36. gradient_background_text_element.setShape(ShapeElement.RECTANGLE); 
  37. RgbColor[] rgbColors = new RgbColor[]{new RgbColor(34, 197, 255), new RgbColor(255, 197, 34)}; 
  38. gradient_background_text_element.setRgbColors(rgbColors); 
  39. gradient_background_text_element.setGradientOrientation(ShapeElement.Orientation.BOTTOM_END_TO_TOP_START); 
  40. gradient_background_text.setBackground(gradient_background_text_element); 
  41. rectangle_layout.addComponent(gradient_background_text); 
  42.  
  43. //這個組件的效果是"實線邊框的背景"矩形 
  44. Text stroke_background_text = initText(this, "實線邊框的背景"); 
  45. //設置背景色和路徑 
  46. ShapeElement stroke_background_text_element = initChildShapeElement(this); 
  47. stroke_background_text_element.setShape(ShapeElement.RECTANGLE); 
  48. stroke_background_text_element.setStroke(5, new RgbColor(255, 197, 34)); 
  49. stroke_background_text.setBackground(stroke_background_text_element); 
  50. rectangle_layout.addComponent(stroke_background_text); 
  51.  
  52. //這個組件的效果是"虛線邊框的背景"矩形 
  53. Text stroke_dash_background_text = initText(this, "虛線邊框的背景"); 
  54. //設置背景色和路徑 
  55. ShapeElement stroke_dash_background_text_element = initChildShapeElement(this); 
  56. stroke_dash_background_text_element.setShape(ShapeElement.RECTANGLE); 
  57. stroke_dash_background_text_element.setStroke(5, new RgbColor(255, 197, 34)); 
  58. stroke_dash_background_text_element.setDashPathEffectValues(new float[]{10, 21, 32, 43, 54, 65}, 1); 
  59. stroke_dash_background_text.setBackground(stroke_dash_background_text_element); 
  60. rectangle_layout.addComponent(stroke_dash_background_text); 

 

OHOS也提供了加載XML資源文件的方法,在graphic文件夾下可以創建xml類型的可繪制資源,如SVG可縮放矢量圖形文件、基本的幾何圖形(如矩形、圓形、線等)shape資源,下面是shape資源XML格式:

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <shape xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  3.        ohos:shape="rectangle"
  4.     <solid 
  5.         ohos:color="#FFFFFF"/> 
  6. </shape> 

 其中ohos:shape是指定幾何圖形,rectangle為矩形樣式。shape的屬性有solid(背景色)、corners表示圓角、gradient表示漸變、stroke表示邊框。

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <shape xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  3.        ohos:shape="rectangle"
  4.     <solid 
  5.         ohos:color="#FF6A5C"/> 
  6.  
  7.     <corners 
  8.         ohos:radius="20"/> 
  9. <!-- 由于缺少相關文檔,還未摸索出漸變的設置方式 --> 
  10. <!--    <gradient/>--> 
  11.  
  12.     <stroke 
  13.         ohos:width="2" 
  14.         ohos:color="#000000"/> 
  15. </shape> 

  

橢圓形

橢圓一般我們不常用,但是圓形我們是常用的,比如默認頭像,我們使用純色背景來實現。

  1. //橢圓形背景 
  2.  
  3. DirectionalLayout oval_layout = initChildDirectionalLayout(this); 
  4.  
  5. //這個組件顯示的效果是"帶背景的橢圓" 
  6.  
  7. Text oval_background_text = initText(this, "帶背景的橢圓"); 
  8.  
  9. //設置背景和橢圓 
  10.  
  11. ShapeElement oval_background_text_element = initChildShapeElement(this); 
  12.  
  13. oval_background_text_element.setShape(OVAL); 
  14.  
  15. oval_background_text.setBackground(oval_background_text_element); 
  16.  
  17. oval_layout.addComponent(oval_background_text); 
  18.  
  19. //這個組件顯示的效果是"帶背景的圓" 
  20.  
  21. Text circular_background_text = initText(this, "帶背景的圓"); 
  22.  
  23. circular_background_text.setWidth(300); 
  24.  
  25. circular_background_text.setHeight(300); 
  26.  
  27. circular_background_text.setTextAlignment(CENTER); 
  28.  
  29. //設置背景和圓(組件的寬高一樣的時候是圓) 
  30.  
  31. ShapeElement circular_background_text_element = initChildShapeElement(this); 
  32.  
  33. circular_background_text_element.setShape(OVAL); 
  34.  
  35. circular_background_text.setBackground(circular_background_text_element); 
  36.  
  37. oval_layout.addComponent(circular_background_text); 
  38.  
  39. layout.addComponent(oval_layout); 

 

直線

直線我們只需要了解即可,這個實際項目中沒有多大意義。

  1. //直線 
  2.  
  3. DirectionalLayout line_layout = initChildDirectionalLayout(this); 
  4.  
  5. Text line_background_text = initText(this, "直線"); 
  6.  
  7. ShapeElement line_background_text_element = initChildShapeElement(this); 
  8.  
  9. line_background_text_element.setShape(LINE); 
  10.  
  11. line_background_text.setBackground(line_background_text_element); 
  12.  
  13. line_layout.addComponent(line_background_text); 
  14.  
  15. layout.addComponent(line_layout); 

 

本小節我們對ShapeElement類有了一些具體的了解,在后面的組件中將不在詳細介紹,可以根據本節內容自定義不同樣式的組件。對于ShapeElement類中的另外兩個繪制幾何圖形的方法,我將在后面的小節中單獨介紹。

XML文件方式設置我在文中簡單的做了介紹,如果直接在布局XML中引用graphic文件下的資源,可以設置組件的ohos:background_element屬性。

  1. ohos:background_element="$graphic:rectangle_background_radius_text" 

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2020-12-04 12:42:59

組件鴻蒙Text

2020-12-23 11:45:27

鴻蒙HarmonyOSTextField組件

2020-12-09 11:53:24

鴻蒙開發HelloWord

2015-07-22 10:57:36

watchOS圖表自定義

2017-03-13 13:54:40

戴爾

2012-08-23 09:50:07

測試測試人員軟件測試

2022-04-24 15:17:56

鴻蒙操作系統

2009-11-23 12:45:22

2023-02-20 15:20:43

啟動頁組件鴻蒙

2009-06-24 15:13:36

自定義JSF組件

2015-08-20 10:56:19

算法界面開發

2013-12-02 09:43:29

字符串編程

2024-02-22 09:00:00

LogitMat數據集算法

2015-09-30 09:57:53

天分熱情工程師

2022-09-14 15:10:40

前端架構

2022-02-15 07:26:34

web前端算法題

2013-07-18 09:21:32

代碼文檔

2014-01-17 13:09:48

Linux碎片整理

2010-11-23 10:55:47

跳槽

2021-12-12 22:20:47

Docker開發容器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 青青青伊人 | 国户精品久久久久久久久久久不卡 | 日本成人中文字幕 | 操操日 | 亚洲精品中文字幕在线观看 | 久久激情视频 | 欧美日韩亚洲一区 | 欧美一区二区 | 欧洲一级毛片 | 精品一区二区三区av | 免费超碰 | 中文字幕国产视频 | 日韩一区二区在线观看 | 中文在线一区二区 | 天天干b| 在线观看视频一区 | 国产精品久久国产精品99 | 中文字幕的av | 国产成人99久久亚洲综合精品 | 欧美6一10sex性hd | 91精品国产99 | 色狠狠一区| 国产精品色综合 | 精品香蕉一区二区三区 | 欧美久久一区 | 亚洲成人日韩 | 欧美午夜激情在线 | 日韩免费 | 国产精品不卡 | 亚洲经典一区 | 国产精品久久久久久久久久久久久 | 亚洲专区在线 | 国产亚洲精品久久久久久豆腐 | 亚洲 日本 欧美 中文幕 | 紧缚调教一区二区三区视频 | 色网在线看| 在线观看中文字幕 | 日本精品视频在线 | 日韩另类| 91素人| 在线免费观看日本 |