有時在我的實踐中,我想圓視圖的背景角。通常我使用這樣的東西(@drawable/bg_rounded)
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="16dp"/>
</shape>
但有時我只需要舍入一個角度并以編程方式執行此操作
我創建了一個測驗專案來顯示問題。 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@ id/container"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_margin="20dp"
android:background="@drawable/bg_rounded">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/purple_200"/>
</FrameLayout>
MainActivity 類可能像
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val container = findViewById<FrameLayout>(R.id.container)
container.clipToOutline = true
val background: GradientDrawable =
container.background.mutate() as? GradientDrawable ?: return
background.cornerRadii = floatArrayOf(
20F, 20F, 20F, 20F,
20F, 20F, 20F, 20F
)
}
}
但發生意外行為 - 角不圓 點擊查看圖片
如果我使用background.cornerRadius它可以預測
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val container = findViewById<FrameLayout>(R.id.container)
container.clipToOutline = true
val background: GradientDrawable =
container.background.mutate() as? GradientDrawable ?: return
background.cornerRadius = 20F
// background.cornerRadii = floatArrayOf(
// 20F, 20F, 20F, 20F,
// 20F, 20F, 20F, 20F
// )
}
}
點擊查看圖片
所以我的問題是:我應該用什么來實作不同圓角半徑的動態調整
uj5u.com熱心網友回復:
如果我使用 background.cornerRadius 它可以預測
這是因為clipping只支持矩形、圓形或圓形矩形。
用的background.cornerRadius時候RoundRect用來畫,用的background.cornerRadii時候Path用來畫,直到API 33. 檢查大綱檔案。
您不能使用可變角半徑,但您可以通過使用ViewOutlineProvider和RoundRect繪制outline. 您可以在此處閱讀有關它的更詳細的答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/481011.html
上一篇:如何從構建的流物件中發出值
