diff --git a/CHANGELOG.md b/CHANGELOG.md index 141a81d..840fdad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,14 @@ +# [v1.0.12] 2025.xx.xx + +> - 添加一个图片组件`AutoImage`,高度固定,宽度只适应 +> +> + # [v1.0.11] 2025.09.02 > - 修改初始化逻辑,解决`This window state is abnormal`的问题 > + # [v1.0.10] 2025.05.30 > - `ToolsHelper.showConfirmDialog()`&`ToolsHelper.showAlertDialog()`添加自定义`UI`功能 diff --git a/Index.ets b/Index.ets index 9680c88..5257608 100644 --- a/Index.ets +++ b/Index.ets @@ -58,7 +58,8 @@ export { LoadingView } from './src/main/ets/view/LoadingView' export { SafeView } from './src/main/ets/view/SafeView' export { RefreshView } from './src/main/ets/view/refresh/RefreshView' export { SwipeView } from './src/main/ets/view/SwipeView' +export { AutoImage } from './src/main/ets/components/AutoImage' /** - * 自定义view + * 全局 */ export { GlobalContext } from './src/main/ets/ContextConfig' diff --git a/README.md b/README.md index cd2c002..7d37847 100644 --- a/README.md +++ b/README.md @@ -409,7 +409,7 @@ struct MyView{ > 使用时建议二次封装 > - + ```tsx // 参数定义如下 /** @@ -619,7 +619,7 @@ build() { } ``` -### 4.3.[SwipeView](src/main/ets/view/SwipeView.ets) +### 4.4.[SwipeView](src/main/ets/view/SwipeView.ets) > 左滑删除 > @@ -639,6 +639,17 @@ build() { } ``` +### 4.5.[AutoImage](src/main/ets/components/AutoImage.ets) + +> +> 高度固定,宽度自适应的图片组件 +> + +```tsx + AutoImage({ src: '', fixedHeight: 77 }) + .margin({ right: 14 }) // 图片之间留点间距 +``` + ## 5.[Windows](./src/main/ets/utils/WindowHelper.ets) ### 5.1.弹出自定义窗口 diff --git a/src/main/ets/components/AutoImage.ets b/src/main/ets/components/AutoImage.ets new file mode 100644 index 0000000..a5fb004 --- /dev/null +++ b/src/main/ets/components/AutoImage.ets @@ -0,0 +1,36 @@ +// components/AutoImage.ets +interface ImgSize { + width: number + height: number +} + +@Component +export struct AutoImage { + @Prop src: PixelMap | ResourceStr | DrawableDescriptor + @Prop fixedHeight: number = 120 // 固定高度(px) + @State imgWidth: number = 0 // 按比例算出的宽度 + private naturalWidth: number = 0 + private naturalHeight: number = 0 + + // 图片加载完成时,获取原图宽高并算宽度 + onImageLoad(info: ImgSize) { + this.naturalWidth = info.width + this.naturalHeight = info.height + if (this.fixedHeight > 0 && this.naturalHeight > 0) { + // 按比例计算宽度 + this.imgWidth = this.fixedHeight * (this.naturalWidth / this.naturalHeight) + } + } + + build() { + Image(this.src) + .width(this.imgWidth > 0 ? this.imgWidth : 0)// 动态计算宽度 + .height(this.fixedHeight)// 固定高度 + .objectFit(ImageFit.Fill)// 保持比例用Fill/Cover/Contain自行选择 + .onComplete((info) => { + if (info) { + this.onImageLoad({ width: info.width, height: info.height }) + } + }) + } +}