2013-07-20 4 views
6

У меня есть объект формы, определенный в 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); 

Но я не знаю, как создать обводку, а затем назначить оба Stroke и GradientDrawable к Shape

Любая идея (?)?

ответ

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); 
    } 


} 

Результат:

Drawable result image

-5

, если вы хотите сделать это в коде, первый осмотр, что экземпляр класса возвращается res.getDrawable (кубовых), например, путем:

Drawable d = res.getDrawable(R.drawable.shape) 
Log.d(TAG, "d: " + d) 
+0

Я не хочу получать объект из ресурсов. Я хочу создать его динамически в Java-коде. –

+0

Ты сделал то, что я написал? каков был результат? – pskink

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> 
Смежные вопросы