3

私は現在、リング状のイメージビューを取得するためにドローアブルを使用しています。

問題は次のとおりです。これらの2つの画像ビューが1行にあり、すべて重み= 1であるため、すべて同じ幅になります。ただし、シェイプリングドローアブルのxmlタグ属性「innerRadiusRatio」はドローアブルの幅に依存します。そのため、イメージビューの幅が高さよりも大きくなると、リングの形状がトリミングされます。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>

シェイプドローアブルの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をthicknessに切り替えたいと思うでしょう。

GradientDrawable のソースを見てきましたが、高さを使用する簡単な方法はないようです。そのため、innerRadius が適切でない場合は、おそらく各 ImageView を別の LinearLayout でラップしてandroid:gravity で中央に配置します。これを行うには、ドローアブルで ImageView のサイズを決定するか、手動で指定する必要があるため、おそらく innerRadius の方が優れています。

于 2013-02-01T17:23:44.537 に答える
0

ImageViews の height 属性と weight 属性を に設定すると、必要な結果が得られるはずですwrap_content

于 2013-02-01T16:04:11.543 に答える