当前位置:   article > 正文

鸿蒙自定义圆形组件_鸿蒙 image 圆形

鸿蒙 image 圆形

前言

DevEco Studio版本:4.0.0.600

使用效果

如何使用

参考文档:OpenHarmony Image组件使用

1、module创建

File-->New-->Module,选择Static Library

2、创建CircleImageView输出类

在CircleLibrary的Index.ets添加对外输出的引用

export { CircleImageView } from './src/main/ets/CircleImageView'

3、CircleImageView的详细代码

  1. @Component
  2. export struct CircleImageView {
  3. //图片的数据源
  4. private src: PixelMap | ResourceStr | DrawableDescriptor
  5. //圆形半径,单位是“px”
  6. private radius: number = 0
  7. //设置图片的填充效果
  8. private objectFit: ImageFit = ImageFit.Cover
  9. //设置图片的重复样式
  10. private objectRepeat: ImageRepeat = ImageRepeat.NoRepeat
  11. //设置图片的插值效果,即缓解图片在缩放时的锯齿问题
  12. private interpolation: ImageInterpolation = ImageInterpolation.None
  13. //设置图片的渲染模式为原色或黑白
  14. private renderMode: ImageRenderMode = ImageRenderMode.Original
  15. //设置图片是否跟随系统语言方向,在RTL语言环境下显示镜像翻转显示效果
  16. private matchTextDirection: boolean = false
  17. //图片组件尺寸未设置时,其显示尺寸是否跟随图源尺寸。
  18. private fitOriginalSize: boolean = false
  19. //设置边框宽度
  20. private border_Width: Length | EdgeWidths = "0"
  21. //设置边框颜色
  22. private border_Color: ResourceColor | EdgeColors = Color.White
  23. //图片加载异常时触发该回调
  24. private onError: (event) => void = () => {
  25. }
  26. //图片数据加载成功和解码成功时均触发该回调,返回成功加载的图片尺寸
  27. private onComplete: (event) => void = () => {
  28. }
  29. build() {
  30. Image(this.src)
  31. .objectFit(this.objectFit)
  32. .objectRepeat(this.objectRepeat)
  33. .interpolation(this.interpolation)
  34. .renderMode(this.renderMode)
  35. .matchTextDirection(this.matchTextDirection)
  36. .fitOriginalSize(this.fitOriginalSize)
  37. .width(`${this.radius * 2}px`)
  38. .height(`${this.radius * 2}px`)
  39. .onComplete((event?: {
  40. width: number,
  41. height: number,
  42. componentWidth: number,
  43. componentHeight: number,
  44. loadingStatus: number,
  45. contentWidth: number,
  46. contentHeight: number,
  47. contentOffsetX: number,
  48. contentOffsetY: number
  49. }) => {
  50. this.onComplete(event)
  51. })
  52. .onError((event?: {
  53. componentWidth: number,
  54. componentHeight: number,
  55. message: string
  56. }) => {
  57. this.onError(event)
  58. })
  59. .borderColor(this.border_Color)
  60. .borderWidth(this.border_Width)
  61. .borderRadius(`${this.radius}px`)
  62. }
  63. }

4、在Entry中引用CircleImageView

上面的CircleImageLIbaray对外输出的har包自己导出,如何引用参考:静态Har共享包

  1. import { CircleImageView } from "@app/CircleLibrary"
  2. @Entry
  3. @Component
  4. struct Index {
  5. build() {
  6. Row() {
  7. Column() {
  8. CircleImageView({
  9. // src: $r("app.media.startIcon"),//本地图片资源
  10. src: "https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF",
  11. radius: 100,
  12. border_Width: "12px",
  13. border_Color: Color.Pink,
  14. onError: (event) => {
  15. },
  16. onComplete: (event) => {
  17. console.info("加载完成!!!!!")
  18. }
  19. })
  20. }
  21. .width('100%')
  22. }
  23. .height('100%')
  24. }
  25. }

通过官方提供的API实现

参考文档:OpenHarmony 形状裁剪

Image.clip()方法实现圆形效果

Stack()布局实现圆形图片外围的边框

注意点:Stack的宽高为Image的宽高+边框的宽度,例子中为:100+ 12 = 112

  1. Stack() {
  2. Image($r("app.media.startIcon"))
  3. .height(100)
  4. .width(100)
  5. .objectFit(ImageFit.Cover)
  6. .clip(new Circle({ width: 100, height: 100 }))
  7. }
  8. .width(112)
  9. .height(112)
  10. .borderWidth(12)
  11. .borderColor(Color.Pink)
  12. .borderRadius(56)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/341290
推荐阅读
相关标签
  

闽ICP备14008679号