日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
2020征文-TV「續(xù)3.1.1文本組件」不需要背景圖,自定義繪制會更好

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

創(chuàng)新互聯(lián)總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計、網(wǎng)站維護(hù)、公眾號搭建、重慶小程序開發(fā)、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動行銷領(lǐng)域創(chuàng)造價值而不懈努力!

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

https://harmonyos./#zz

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

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

ShapeElement類源碼

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

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

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

 
 
 
 
  1. /** 
  2.   * 繼承自Element,提供了帶有顏色漸變的可繪制實(shí)例,通常用于視圖背景 
  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.     //默認(rèn)構(gòu)造器,在代碼中設(shè)定幾何圖形和背景的話,使用這個構(gòu)造函數(shù) 
  14.     public ShapeElement() {} 
  15.     //引用資源文件中設(shè)定的幾何圖形和背景的話,使用這個構(gòu)造函數(shù) 
  16.     //xmlId為資源文件的內(nèi)存地址 
  17.     public ShapeElement(Context context, int xmlId) {} 
  18.      
  19.     //設(shè)置要顯示的集合圖形,參數(shù)為上面的靜態(tài)常量 
  20.     public void setShape(int shape) {} 
  21.     //設(shè)置背景顏色 
  22.     public void setRgbColor(RgbColor color) {} 
  23.     //設(shè)置漸變效果填充的顏色值,參數(shù)為顏色數(shù)組,對直線無效 
  24.     public void setRgbColors(RgbColor[] colors) {} 
  25.     //設(shè)置邊框的寬度和顏色 
  26.     public void setStroke(int width, RgbColor color) {} 
  27.     //設(shè)置圓角半徑,這個方法僅對矩形有效 
  28.     public void setCornerRadius(float radius) {} 
  29.     //設(shè)置每個角的半徑,這個方法僅對矩形有效 
  30.     //表示四個角的半徑數(shù)組。如果數(shù)組的長度不等于8,則該設(shè)置無效。 
  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.     //設(shè)置虛線的間隔和相位 
  37.     //數(shù)組項是成對的:這些值的偶數(shù)和奇數(shù)索引分別指定要繪制的象素個數(shù)和空白象素個數(shù)。 
  38.     public void setDashPathEffectValues(float[] intervals, float phase) {} 

 ShapeElement實(shí)例應(yīng)用

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

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

首先我們先了解一下,我們?yōu)楹问褂眠@種類型的背景。

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

2、編寫一個矩形、圓、橢圓,便于維護(hù),只需要改動少量代碼即可實(shí)現(xiàn)效果

3、節(jié)省內(nèi)存

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

矩形

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

 
 
 
 
  1. //矩形背景 
  2. DirectionalLayout rectangle_layout = initChildDirectionalLayout(this); 
  3.  
  4. //這個組件顯示的效果是"帶背景的矩形" 
  5. Text rectangle_background_text = initText(this, "帶背景的矩形"); 
  6. //設(shè)置背景色 
  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. //設(shè)置背景色和圓角 
  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. //設(shè)置背景色和每個角的圓角 
  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. //設(shè)置背景色和漸變(從下端角到上端角) 
  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. //這個組件的效果是"實(shí)線邊框的背景"矩形 
  44. Text stroke_background_text = initText(this, "實(shí)線邊框的背景"); 
  45. //設(shè)置背景色和路徑 
  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. //設(shè)置背景色和路徑 
  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文件夾下可以創(chuàng)建xml類型的可繪制資源,如SVG可縮放矢量圖形文件、基本的幾何圖形(如矩形、圓形、線等)shape資源,下面是shape資源XML格式:

 
 
 
 
  1.  
  2.        ohos:shape="rectangle"> 
  3.     
  4.         ohos:color="#FFFFFF"/> 
  5.  

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

 
 
 
 
  1.  
  2.        ohos:shape="rectangle"> 
  3.     
  4.         ohos:color="#FF6A5C"/> 
  5.  
  6.     
  7.         ohos:radius="20"/> 
  8.  
  9.  
  10.  
  11.     
  12.         ohos:width="2" 
  13.         ohos:color="#000000"/> 
  14.  

  

橢圓形

橢圓一般我們不常用,但是圓形我們是常用的,比如默認(rèn)頭像,我們使用純色背景來實(shí)現(xiàn)。

 
 
 
 
  1. //橢圓形背景 
  2.  
  3. DirectionalLayout oval_layout = initChildDirectionalLayout(this); 
  4.  
  5. //這個組件顯示的效果是"帶背景的橢圓" 
  6.  
  7. Text oval_background_text = initText(this, "帶背景的橢圓"); 
  8.  
  9. //設(shè)置背景和橢圓 
  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. //設(shè)置背景和圓(組件的寬高一樣的時候是圓) 
  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); 

直線

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

 
 
 
 
  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); 

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

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

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

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

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

https://harmonyos./#zz


當(dāng)前標(biāo)題:2020征文-TV「續(xù)3.1.1文本組件」不需要背景圖,自定義繪制會更好
本文來源:http://www.5511xx.com/article/cdpshco.html