2015-08-28 2 views
1

Основываясь на коде, который я использовал для моего рисунка на холсте и скриншоте, я пытаюсь заполнить конкретный прямоугольник другим цветом, но вместо этого это неожиданное поведение происходит там, где другие прямоугольники также меняют цвет такта. Кто-нибудь знает, что можно сделать, исправить эту проблему?Как использовать различный цвет заливки для конкретных прямоугольников

Я хочу только 2-й прямоугольник из слева на верхней строке, чтобы заполнить черный & погладил красный в то время как другие прямоугольники остаются с красным инсультом

public class Car extends View { 
    public Car(Context context) { 
     super(context); 
     init(); 
    } 

    public Car(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public Car(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    Paint paint; 

    private void init() { 
     paint = new Paint(); 
     paint.setColor(Color.RED); 
     paint.setStrokeWidth(4); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     int w = canvas.getWidth(); 
     int h = canvas.getHeight(); 

     int rectWidth = w/5; 
     int space = w/15; 
     int topRectHeight = getPaddingTop(); 
     int bottomRectHeight = getPaddingBottom(); 

     paint.setStyle(Paint.Style.STROKE); //add this 
     for (int i = 0; i < 4; i++) { 
      int left = i * (rectWidth + space); 
      int right = left + rectWidth; 

      if (i == 1){ 
       paint.setStyle(Paint.Style.FILL); 
       paint.setColor(Color.BLACK); 
      } 
      else{ 
       paint.setColor(Color.RED); 
      } 

      Rect rect = new Rect(left, 0, right, topRectHeight); 
      canvas.drawRect(rect, paint); 
      paint.setStyle(Paint.Style.STROKE);//add this 
      Rect rect2 = new Rect(left, h - bottomRectHeight, right, h); 
      canvas.drawRect(rect2, paint); 
     } 
    } 
} 

enter image description here

ответ

1

Я хочу, чтобы второй прямоугольник слева в верхнем ряду был f ыть убитым черный & погладил красный в то время как другие прямоугольники остаются с красного инсульта

Для этого в if случай, когда i=1 вам нужно сделать две вещи

  1. setStyle для заполнить и setColor к черный и нарисуйте прямоугольник.
  2. Затем снова отбросили назад setStyle к тактный и setColor к красный и рисовать rect2 вашей.

Код:

protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     int w = canvas.getWidth(); 
     int h = canvas.getHeight(); 

     int rectWidth = w/5; 
     int space = w/15; 
     int topRectHeight = getPaddingTop(); 
     int bottomRectHeight = getPaddingBottom(); 

     paint.setStyle(Paint.Style.STROKE); //add this 
     for (int i = 0; i < 4; i++) { 
      int left = i * (rectWidth + space); 
      int right = left + rectWidth; 

      if (i == 1){ 
       paint.setStyle(Paint.Style.FILL); 
       paint.setColor(Color.BLACK); 
       Rect rect = new Rect(left, 0, right, topRectHeight); 
       canvas.drawRect(rect, paint); 
       //again set back the style here 
       paint.setStyle(Paint.Style.STROKE); 
       paint.setColor(Color.RED); 
       Rect rect2 = new Rect(left, 0, right, topRectHeight); 
       canvas.drawRect(rect2, paint); 
       //this will draw the lower rectangle! Using extra variable rect3 just for safer side. 
       Rect rect3 = new Rect(left, h - bottomRectHeight, right, h); 
       canvas.drawRect(rect3, paint); 
      }else{ 
       Rect rect = new Rect(left, 0, right, topRectHeight); 
       canvas.drawRect(rect, paint); 
       paint.setStyle(Paint.Style.STROKE);//add this 
       Rect rect2 = new Rect(left, h - bottomRectHeight, right, h); 
       canvas.drawRect(rect2, paint); 
      } 
     } 
    } 
+0

Почти, хотя красный мазок не показывает: [ссылка на скриншот] (http://picpaste.com/Screen_Shot_2015-08-28_at_18.41.09-mVUv7MY4.png) – MacaronLover

+0

он должен работать, я проверю, дайте мне минутку. –

+0

Отредактировано, пожалуйста, проверьте его, можете ли вы сказать мне, если это правильно? –