我有一个用XML定义的形状对象,如下所示:
<shape android:shape="rectangle">
<gradient
android:startColor="#333"
android:centerColor="#DDD"
android:endColor="#333"/>
<stroke android:width="1dp" android:color="#FF333333" />
</shape>
我想在我的代码中创建一个相等的对象。
我创建了一个GradientDrawable
,如下所示:
gradientDrawable1.setColors(new int[] { 0x333, 0xDDD, 0x333 });
gradientDrawable1.setOrientation(Orientation.TOP_BOTTOM);
但我不知道如何创建一个笔画(?),然后将笔画和GradientDrawable
分配给Shape
有什么想法吗?
答案 0 :(得分:7)
示例:
import android.graphics.drawable.GradientDrawable;
public class SomeDrawable extends GradientDrawable {
public SomeDrawable(int pStartColor, int pCenterColor, int pEndColor, int pStrokeWidth, int pStrokeColor, float cornerRadius) {
super(Orientation.BOTTOM_TOP,new int[]{pStartColor,pCenterColor,pEndColor});
setStroke(pStrokeWidth,pStrokeColor);
setShape(GradientDrawable.RECTANGLE);
setCornerRadius(cornerRadius);
}
}
用法:
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SomeDrawable vDrawable = new SomeDrawable(Color.BLACK,Color.GREEN,Color.LTGRAY,2,Color.RED,50);
View vView = new View(this);
vView.setBackgroundDrawable(vDrawable);
setContentView(vView);
}
}
结果:
答案 1 :(得分:0)
这应该肯定有效,尝试 gradientDrawable1.setStroke(1, getResources().getColor(R.color.stroke));
所以您的代码应为:
GradientDrawable gradientDrawable1 = new GradientDrawable(Orientation.TOP_BOTTOM, new int[]{getResources().getColor(R.color.start),getResources().getColor(R.color.center),getResources().getColor(R.color.start)} );
gradientDrawable1.setStroke(1, getResources().getColor(R.color.stroke));
其中颜色描边,开始,中心在colors.xml
中定义为:
<color name="stroke">#FF333333</color>
<color name="start">#333</color>
<color name="center">#ddd</color>
答案 2 :(得分:-5)
如果你想在代码中创建它,首先检查res.getDrawable(resId)返回的类实例,例如:
Drawable d = res.getDrawable(R.drawable.shape)
Log.d(TAG, "d: " + d)