gpt4 book ai didi

Android:圆形图像的框架

转载 作者:行者123 更新时间:2023-12-05 00:04:21 26 4
gpt4 key购买 nike

我正在努力解决以下问题:

我想实现这个:

我得出以下结论:

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/drawable_gold_frame">

<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" />
</LinearLayout>

<style name="CircleImageView" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">50%</item>
</style>

<dimen name="all_time_best_photo_size">70dp</dimen>
<dimen name="all_time_best_frame_thickness">5dp</dimen>

<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="ring"
android:thickness="@dimen/all_time_best_frame_thickness"
android:useLevel="false">
<gradient
android:startColor="@color/gold_gradient_start"
android:centerColor="@color/gold_gradient_end"
android:endColor="@color/gold_gradient_start"
android:angle="180" />
</shape>

然后使用 Glide 加载图像本身。这看起来像这样:

戒指形状在哪里?好吧,如果我增加 ImageView 的边距,它就会变得可见:

android:layout_margin="20dp"

android:layout_margin="15dp"(不要介意颜色)

所以最后一个是我能得到的最接近的,我想我可以调整边距并让它变得更好,但我认为它可能会因不同的设备等而崩溃......

我不明白的是为什么对环厚度和 ImageView 边距使用相同的 dimen 不起作用。有没有更“安全”的方法来实现这一目标?

请注意,所有图片的帧大小都是相同的,我只是将屏幕截图裁剪得非常糟糕

最佳答案

我无法获得环形的清晰结果,所以我最终做的是:

<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" />

并将背景设置为 ImageView 本身,不幸的是 ShapeableImageView 根据填充缩放背景(标准 ImageView 不这样做) .

一个用户在github上创建了issue,通过PR解决了这个问题,已经合并但是还没有发布,查看issuepull request .

如果我设法使用 Ring shape 做到这一点,我会发布更新。

关于Android:圆形图像的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63815015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com