ImageView setImageDrawable不适用于ShapeDrawable

时间:2018-05-17 18:47:09

标签: android

我已经以编程方式创建了ShapeDrawable,并希望将其显示在ImageView中。如果我使用ImageView.setImageDrawable(),我将无法看到ShapeDrawable。如果我使用ImageView.setBackground(),则可以使用。

为什么ImageView.setImageDrawable()不起作用?

布局文件中的ImageView:

<ImageView
    android:id="@+id/myImageView"
    android:layout_width="100dp"
    android:layout_height="200dp" />

活动onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    int x = 0;
    int y = 0;
    int width = 300;
    int height = 250;

    ShapeDrawable drawable = new ShapeDrawable(new OvalShape());
    drawable.getPaint().setColor(0xff74AC23);
    drawable.setBounds(x, y, x + width, y + height);

    ImageView iv = findViewById(R.id.myImageView);
    iv.setBackground(drawable);        // works
    //iv.setImageDrawable(drawable);   // doesn't work
}

2 个答案:

答案 0 :(得分:5)

要在ImageView中显示ShapeDrawable,您的ShapeDrawable应定义高度和宽度。将以下属性添加到ShapeDrawable。

drawable.setIntrinsicHeight(height); drawable.setIntrinsicWidth(width);

答案 1 :(得分:2)

您还可以使用简单的视图,并使用setBackgroundDrawable将其背景可绘制设置为形状。

ImageView可能无法显示您的形状,因为它没有默认大小。您可以使用sD.setIntrinsicWidth和sD.setIntrinsicHeight为您的形状赋予默认的大小调整器。