是否可以以编程方式创建drawable并将其分配给ImageView?

时间:2014-10-19 17:45:08

标签: android

所以我试图以某种方式在代码中创建一个Path对象(没有XML)并将其绘制到ImageView中。问题是我无法找到以编程方式创建任何形状并将其显示在我的ImageView中的任何方法。我可以轻松地将ImageView分配给XML资源,并且可以正常工作:

imageView.setImageResource(R.drawable.resourcename);

这是XML文件:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <size
        android:height="50dp"
        android:width="50dp" />
    <solid
        android:color="#00f"
        />
</shape>

但是,如果我执行类似下面的代码,我认为它应该工作,它编译并运行没有错误,但没有任何反应。我尝试创建一个简单的RectShape并使用setImageDrawable为其分配ImageView。我在这里完全咆哮错误的树吗?我是Android编码fyi的新手,所以我很可能会离开这里。我注意到我从不手动绘制矩形,我是否必须在某处做?我有点想象ImageView会照顾它,但也许不会。如果您需要有关我的代码的更多信息,请与我们联系。

RectShape rect = new RectShape();
rect.resize(50,50);
ShapeDrawable sdRect = new ShapeDrawable(rect);
sdRect.getPaint().setColor(Color.BLACK);
sdRect.getPaint().setStyle(Paint.Style.FILL);
imageView.setImageDrawable(sdRect);

2 个答案:

答案 0 :(得分:9)

我看了Drawable来源,看起来XML标记<shape>膨胀到GradientDrawable而不是ShapeDrawable。用以下代码替换您的代码:

GradientDrawable gd = new GradientDrawable();
gd.setShape(GradientDrawable.RECTANGLE);
gd.setColor(Color.BLACK);
imageView.setImageDrawable(gd);

答案 1 :(得分:0)

必须设置ShapeDrawable的宽度和高度。在您的代码中样本大小为0,所以您看不到rect

sdRect.setIntrinsicWidth(50)
sdRect.setIntrinsicHeight(50)