2015-12-08 4 views
2
<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 

    <corners android:radius="@dimen/radius_default"/> 
    <solid 
     android:color="@color/alpha"/> 

    <stroke 
     android:width="1dp" 
     android:color="@color/red"/> 

</shape> 

Я хочу изменить цвет инсульта во время выполнения.Как изменить цвет формы программно?

Я использовал этот код, но он не работал.

Drawable drawable = getResources().getDrawable(R.drawable.border_red); 
     drawable.setColorFilter(Color.BLUE), PorterDuff.Mode.SRC_ATOP); 
     container.setBackground(drawable); 

Как изменить цвет инсульта?


 float[] outerR = new float[] { 12, 12, 12, 12, 0, 0, 0, 0 }; 
     RectF inset = new RectF(6, 6, 6, 6); 
     float[] innerR = new float[] { 12, 12, 0, 0, 12, 12, 0, 0 }; 
     ShapeDrawable biggerCircle = new ShapeDrawable(new RoundRectShape(outerR,inset, innerR)); 
     biggerCircle.setIntrinsicHeight(60); 
     biggerCircle.setIntrinsicWidth(60); 
     biggerCircle.setBounds(new Rect(30, 30, 30, 30)); 
     biggerCircle.getPaint().setColor(Color.BLUE); 
     border.setBackgroundDrawable(biggerCircle); 

я еще не рефакторинга, но этот код работает для меня. спасибо

+0

, но это работа. –

+0

@ Лакхан спасибо! ^^ –

+0

@jihoonkim рад, что это сработало –

ответ

2

эту одну работу для меня и дал мне круглую форму с цветом

ShapeDrawable biggerCircle= new ShapeDrawable(new OvalShape()); 
       biggerCircle.setIntrinsicHeight(60); 
       biggerCircle.setIntrinsicWidth(60); 
       biggerCircle.setBounds(new Rect(30, 30, 30, 30)); 
       biggerCircle.getPaint().setColor(Color.parseColor(first));//you can give any color here 
       holder.firstcolor.setBackgroundDrawable(biggerCircle); 
+0

Спасибо. если вы используете RoundRectShape, ваш код работает для меня. !! ShapeDrawable большеCircle = new ShapeDrawable (новый RoundRectShape (...)); –

+1

@jihoonkim рад помочь вам..Хорошее кодирование :) –

1

Прежде всего получите Drawable, используя getbackground().

Drawable background = imageView.getBackground(); 


if (background instanceof ShapeDrawable) { 
    // cast to 'ShapeDrawable' 
    ShapeDrawable shapeDrawable = (ShapeDrawable)background; 
    shapeDrawable.getPaint().setColor(getResources().getColor(R.color.colorToSet)); 
} else if (background instanceof GradientDrawable) { 
    // cast to 'GradientDrawable' 
    GradientDrawable gradientDrawable = (GradientDrawable)background; 
    gradientDrawable.setColor(getResources().getColor(R.color.colorToSet)); 
} 
2

время выполнения фигуры не очень хорошо, как и от XML, но мы можем создать форму, и мы можем изменить его цвет фона, а также его цвет границы.

создать один метод может помочь полный к вам

public static LayerDrawable getDrawable(Shape shape, int colorBGNormal, int colorBorderNormal, int defaultStrokeWidth) { 

    Drawable[] layers = new Drawable[2]; 
    ShapeDrawable background = new ShapeDrawable(); 
    ShapeDrawable backgroundBorder = new ShapeDrawable(); 

    background.setShape(shape); 
    background.getPaint().setColor(colorBGNormal); 
    background.getPaint().setAntiAlias(true); 

    backgroundBorder.setShape(shape); 
    backgroundBorder.getPaint().setColor(colorBorderNormal); 
    backgroundBorder.getPaint().setStyle(Style.STROKE); 
    backgroundBorder.getPaint().setStrokeWidth(defaultStrokeWidth); 
    backgroundBorder.getPaint().setAntiAlias(true); 

    layers[0] = background; 
    layers[1] = backgroundBorder; 

    return new LayerDrawable(layers); 
}