2013-07-19 2 views
2

Я пытаюсь создать круг для моего TextView, поэтому я создал стиль формы, как показано ниже. Но мне нужно иметь несколько цветов с несколькими размерами (в то время как textSize остается постоянным), поэтому мне нужно установить ширину/высоту в стиле.Android - Несколько цветов и размеров в стиле рисованной формы

Из моего понимания .. Layer List ставит все формы друг на друга? Потому что мне нужно называть его 12 раз в разных местах, поэтому кажется довольно громоздким иметь xmls в стиле 12.

Есть ли лучший способ иметь все различные комбинации форма/размер внутри одного XML?

Форма Стиль:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <corners android:radius="10dp"/> 
    <solid android:color="@color/girl_orange"/> 
     <size 
     android:width="84dp" 
     android:height="84dp" /> 
</shape> 

Вызывается в макет XML с помощью:

android:background="@drawable/skills_circle" 

Спасибо заранее !!

+0

замечательный QA, спасибо за это! – Fattie

ответ

1

создать пользовательскую вытяжку, таким образом, вы можете иметь Milions комбинацию размера/цвета:

class CircleDrawable extends Drawable { 
... 
} 
+0

Спасибо! Я последовал твоему совету и создал индивидуальный класс. Я отправил свой код в ответ: D – Merelda

+0

Какой замечательный отзыв, спасибо – Fattie

1

Так я следовал советам из pskink и создал CircleDrawable класса.

Он работает очень хорошо для моего приложения (хотя я не знаю, правильно ли это ...), поэтому я решил поделиться им.

public CircleDrawable(Bitmap bitmap, Context context) { 
    paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setStyle(Paint.Style.FILL); 
    CircleDrawable.context = context; 
    drawable = new ShapeDrawable(new OvalShape()); 
    setColor(); // supports multiple color 
    setSize(); //supports multiple size 
} 

private void setColor() { 

    // some algorithm to pick the right color... 
    if (...) 
     int color = context.getResources().getColor(R.color.pale_blue); 

    paint.setColor(color); 
} 

    /* 
    * algorithm to set size here... 
    */ 

@Override 
public void draw(Canvas canvas) { 

    //draw circle in the middle of the TextView 
    canvas.drawCircle(textViewSize, textViewSize, circleSize, paint); 
} 

И в основном коде, где мне нужно динамически рисовать круги:

final float scale = getApplicationContext().getResources().getDisplayMetrics().density; 
    int pixels = (int) (107.0f * scale + 0.5f); 
    skills.setWidth(pixels); 
    skills.setHeight(pixels); 
    skills.setBackground(new CircleDrawable(null, getApplicationContext())); 

И я в конечном итоге с кучей кругов с различными формами и цветами. enter image description here

+0

хорошо, но вам не нужно (битмап-битмап-параметр в конструкторе, также вам не нужен набор для рисования ShapeDrawable, я думаю, что такие проблемы показаны eclipse как предупреждения – pskink

+0

Вы совершенно правы, но не были показаны как предупреждения. Спасибо еще раз :) – Merelda

+0

Эй, вы можете сделать это в iOS ... но это занимает около 8 миллионов строк кода :) – Fattie

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