我无法用环形来实现它,所以我最终做的是:
<FrameLayout
android:id="@+id/gold_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/gold_photo"
android:layout_width="@dimen/all_time_best_photo_size"
android:layout_height="@dimen/all_time_best_photo_size"
android:layout_margin="@dimen/all_time_best_frame_thickness"
app:shapeAppearanceOverlay="@style/CircleImageView" />
</FrameLayout>
和
val medal = GradientDrawable(
GradientDrawable.Orientation.LEFT_RIGHT, intArrayOf(
ContextCompat.getColor(requireContext(), R.color.gold_gradient_1),
ContextCompat.getColor(requireContext(), R.color.gold_gradient_2),
ContextCompat.getColor(requireContext(), R.color.gold_gradient_3),
ContextCompat.getColor(requireContext(), R.color.gold_gradient_4),
ContextCompat.getColor(requireContext(), R.color.gold_gradient_5)
)
)
medal.shape = GradientDrawable.OVAL
binding.goldFrame.background = medal
这样,我创建了一个内部有渐变的圆,然后将其设置为背景
ImageView
的容器。它并不完美,因为如果你想要的图像具有透明度,它就不起作用,但在我的情况下是有效的。
此外,可以通过移除容器并执行以下操作来改进:
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/gold_photo"
android:layout_width="@dimen/all_time_best_photo_size"
android:layout_height="@dimen/all_time_best_photo_size"
android:padding="@dimen/all_time_best_frame_thickness"
app:shapeAppearanceOverlay="@style/CircleImageView" />
并将背景设置为
图片框
不幸的是,它本身
ShapeableImageView
根据填充缩放背景(标准
图片框
不这样做)。
一位用户在github上创建了问题,并通过PR解决了问题,PR已合并但尚未发布,请查看
issue
和
pull request
.
如果我能用Ring shape做到这一点,我会发布一个更新。