شما میتوانید یک تصویر را در یک شکل برش داده شده قرار دهید و سایههایی را در اطراف محیط شکل بکشید تا حس سهبعدی ایجاد شود. این تکنیک برای ایجاد طرحهایی مانند آواتار و تصاویر کوچک محصول یا نمایش لوگوها با اشکال سفارشی مفید است.
برای نمایش تصویری که به یک شکل برش داده شده است، باید موارد زیر را انجام دهید:
- شکل را ایجاد کنید.
- تصویر را به شکل مورد نظر بچسبانید (کلیپس کنید).
نتایج

سازگاری نسخه
این پیادهسازی مستلزم آن است که minSDK پروژه شما روی سطح API 21 یا بالاتر تنظیم شده باشد.
وابستگیها
ایجاد یک شکل
کد زیر یک شکل سفارشی ایجاد میکند که میتواند به صورت پویا یک چندضلعی گرد را ترسیم و رندر کند:
fun RoundedPolygon.getBounds() = calculateBounds().let { Rect(it[0], it[1], it[2], it[3]) } class RoundedPolygonShape( private val polygon: RoundedPolygon, private var matrix: Matrix = Matrix() ) : Shape { private var path = Path() override fun createOutline( size: Size, layoutDirection: LayoutDirection, density: Density ): Outline { path.rewind() path = polygon.toPath().asComposePath() matrix.reset() val bounds = polygon.getBounds() val maxDimension = max(bounds.width, bounds.height) matrix.scale(size.width / maxDimension, size.height / maxDimension) matrix.translate(-bounds.left, -bounds.top) path.transform(matrix) return Outline.Generic(path) } }
نکات کلیدی در مورد کد
-
RoundedPolygon.getBounds()یک تابع افزونه روی کلاسRoundedPolygonتعریف میکند تا کرانههای آن را محاسبه کند. - کلاس
RoundedPolygonShapeرابطShapeرا پیادهسازی میکند و به شما امکان میدهد یک شکل سفارشی (یک چندضلعی گرد) را در Jetpack Compose تعریف کنید. - این شکل از یک
Matrixبرای مدیریت عملیات مقیاسبندی و انتقال برای رندر انعطافپذیر استفاده میکند. - تابع
createOutline()یک شیءRoundedPolygonرا میگیرد، آن را مقیاسبندی و منتقل میکند تا در اندازه مشخصی قرار گیرد، و یک شیءOutlineبرمیگرداند که شکل نهایی ترسیم شده را توصیف میکند.
تصویر را به یک شکل برش دهید
کد زیر تصویر را به شکل شش ضلعی برش میدهد و یک سایهی ظریف برای ایجاد حس عمق به آن اضافه میکند:
val hexagon = remember { RoundedPolygon( 6, rounding = CornerRounding(0.2f) ) } val clip = remember(hexagon) { RoundedPolygonShape(polygon = hexagon) } Box( modifier = Modifier .clip(clip) .background(MaterialTheme.colorScheme.secondary) .size(200.dp) ) { Text( "Hello Compose", color = MaterialTheme.colorScheme.onSecondary, modifier = Modifier.align(Alignment.Center) ) }
نکات کلیدی در مورد کد
- اشیاء
RoundedPolygonوRoundedPolygonShapeبرای تعریف و اعمال شکل شش ضلعی به تصویر استفاده میشوند. - این کد از
graphicsLayerبرای اضافه کردن سایهای مبتنی بر ارتفاع به تصویر استفاده میکند. این کار باعث ایجاد حس عمق و جدایی بصری از پسزمینه میشود. - استفاده از بلوکهای
remember، با تضمین اینکه تعاریف شکل و برش فقط یک بار محاسبه میشوند و برای ترکیببندیهای بعدی رابط کاربری به خاطر سپرده میشوند، عملکرد را بهینه میکند.
مجموعههایی که حاوی این راهنما هستند
این راهنما بخشی از این مجموعههای راهنمای سریعِ برگزیده است که اهداف گستردهتر توسعه اندروید را پوشش میدهد:
