所以我试图以某种方式在代码中创建一个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);
答案 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)