3

我目前正在使用可绘制对象来获得环形图像视图。

问题是:我在一行中有两个这样的图像视图,它们的权重=1,所以它们都具有相同的宽度。形状环drawable的xml标签属性“innerRadiusRatio”依赖于drawable的宽度。因此,如果 imageview 的宽度变得大于高度,则将裁剪环形。有什么办法可以让 innerRadiusRatio 依赖于高度而不是宽度?甚至将其 scaleType 设置为“fitCenter”或类似的东西?

这是我的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_height="64dip"
          android:layout_width="match_parent">
<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:background="@drawable/ring_shape_drawable"
    android:src="@drawable/test_button_drawable"/>

<ImageView        
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:background="@drawable/ring_shape_drawable"
    android:src="@drawable/test_button_drawable"/>
</LinearLayout>

这是形状drawable的xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadiusRatio="2.8"
    android:thicknessRatio="30"
    android:useLevel="false"
    android:shape="ring" >

    <solid android:color="@color/custom_red" />

</shape>

这是结果(我不想要裁剪的 ringShapeDrawable): 在此处输入图像描述

这将是期望的结果: 在此处输入图像描述

谢谢你的帮助 :)

4

2 回答 2

1

由于您在 LinearLayout 中指定了一个恒定的高度,因此您应该能够使用innerRadius属性。您可能还希望将 thicknessRatio 切换为具有设定尺寸的厚度。

我查看了 GradientDrawable 的源代码,似乎没有一种简单的方法可以让它使用高度,所以如果 innerRadius 不合适,你可能不得不将每个 ImageView 包装在另一个 LinearLayout 和以 android:gravity 为中心。这样做需要drawable确定ImageView的大小或手动指定它,所以innerRadius可能更好。

于 2013-02-01T17:23:44.537 回答
0

如果将 ImageViews 的 height 和 weight 属性设置为 ,您应该会得到您想要的结果wrap_content

于 2013-02-01T16:04:11.543 回答