2013-12-12 7 views
1

Я пытаюсь изменить цвет в форме appWidget. У меня есть прямоугольник с углами, моя цель - изменить цвет фона (сплошной) и границы.Изменение формы в appWidget

Мой расположение виджетов является RelativeLayout с ImageView для фона, атрибут SRC этого ImageView эта форма:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <corners 
     android:radius="5dp" 
     android:topRightRadius="5dp" 
     android:bottomRightRadius="5dp" 
     android:bottomLeftRadius="5dp" /> 
    <stroke 
     android:width="1dp" 
     android:color="@android:color/white" /> 
    <solid android:color="@color/transparent"/> 
</shape> 

Вот что я пытаюсь сделать, когда я пытаюсь изменить фон цвет:

RoundRectShape sd = new RoundRectShape(new float[]{30,30,30,30,30,30,30,30}, null, null); 
bmp_bg = Bitmap.createBitmap(200, 20, Bitmap.Config.ARGB_8888); 
Canvas c = new Canvas(bmp_bg); 
Paint p = new Paint(); 
p.setColor(0xFF0000FF); 
sd.draw(c, p); 
remoteViews.setImageViewBitmap(R.id.imageClock, bmp_bg); 

Но фон не меняется. Это хороший способ сделать это? Или я совершенно не прав? ТНХ

EDIT: Я попытался это тоже без какого-либо эффекта:

CustomShapeClockWidget cscw = new CustomShapeClockWidget(0xFF0000FF, 0xFFFF0000); 
bmp_bg = Bitmap.createBitmap(200, 20, Bitmap.Config.ARGB_8888); 
Canvas c = new Canvas(bmp_bg); 
cscw.draw(c); 
remoteViews.setImageViewBitmap(R.id.imageClock, bmp_bg); 

с классом CustomShapeClockWidget существа:

public class CustomShapeClockWidget extends ShapeDrawable { 

    private int bgColor, strokeColor; 
    private Paint fillPaint, strokePaint; 

    public CustomShapeClockWidget(int bgColor, int strokeColor){ 
     this.bgColor = bgColor; 
     this.strokeColor = strokeColor; 
    } 

    @Override 
    protected void onDraw(Shape shape, Canvas canvas, Paint paint){ 
     fillPaint = this.getPaint(); 
     strokePaint = new Paint(fillPaint); 

     fillPaint.setColor(bgColor); 

     strokePaint.setStyle(Paint.Style.STROKE); 
     strokePaint.setStrokeWidth(1.0f); 
     strokePaint.setColor(strokeColor); 

     shape.draw(canvas, fillPaint); 
     shape.draw(canvas, strokePaint); 
    } 

} 
+0

(Очень поздний комментарий, но) Вы обновляете приложение после вызова remoteViews.setImageViewBitmap? –

ответ

0

(поздний ответ, надеюсь, что это помогает любому борется с формами в appwidgets like me)

Первый код, который вы написали, почти завершен, ему просто не хватает вызова resize(float, float) необходимо до draw(Canvas, Paint). Нет необходимости создавать пользовательский объект формы.

SDK documentation говорит, что это для RoundRectShape и других форм:

Нарисуйте фигуру в предоставленном Canvas, с помощью прилагаемого Paint. Перед вызовом этого вызова вы должны вызвать изменение размера (float, float).

Смежные вопросы