2015-07-01 2 views
0

Я пытаюсь нарисовать 4 прямоугольника на холсте, чтобы холст был разделен на 4 равных прямоугольника. С кодом, который у меня теперь есть, только последний прямоугольник в моем коде рисуется.Нарисуйте несколько прямоугольников андроида холст

Это код в моей деятельности:

protected void onCreate(Bundle savedInstanceState) { 
    ... 
setContentView(new MyView(this)); 
} 

public class MyView extends View { 

    public MyView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
     setFocusableInTouchMode(true); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 

     super.onDraw(canvas); 
     int x = getWidth(); 
     int y = getHeight(); 


     Paint paintTopLeft = new Paint(); 
     paintTopLeft.setStyle(Paint.Style.FILL); 
     paintTopLeft.setColor(Color.WHITE); 
     canvas.drawPaint(paintTopLeft); 
     // Use Color.parseColor to define HTML colors 
     paintTopLeft.setColor(Color.parseColor("#F44336")); 
     canvas.drawRect(0,0,x/2,y/2,paintTopLeft); 

     Paint paintTopRight = new Paint(); 
     paintTopRight.setStyle(Paint.Style.FILL); 
     paintTopRight.setColor(Color.WHITE); 
     canvas.drawPaint(paintTopRight); 
     // Use Color.parseColor to define HTML colors 
     paintTopRight.setColor(Color.parseColor("#2196F3")); 
     canvas.drawRect(x/2, 0, x, y/2, paintTopRight); 

    } 
} 

Что я делаю неправильно?

+0

ли фон белый? Измените цвет объектов Paint (paintTopRight и paintTopLeft) на другой цвет вместо белого, просто чтобы увидеть, действительно ли это не рисование. – heloisasim

+0

Сделал это, и он все еще только показывает последний прямоугольник с белым фоном. – user3182261

ответ

2

На самом деле я вижу только два прямоугольника, которые нарисованы с помощью вашего кода. Но в любом случае проблема заключается в том, что вы вызываете canvas.drawPaint, который очищает/заполняет полный холст этим цветом. Таким образом, вы удаляете все прямоугольники, которые были нарисованы уже перед тем, как нарисовать последний.

Этот код должен работать:

protected void onCreate(Bundle savedInstanceState) { 
    ... 
setContentView(new MyView(this)); 
} 

public class MyView extends View { 

    public MyView(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
     setFocusableInTouchMode(true); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 

     super.onDraw(canvas); 
     int x = getWidth(); 
     int y = getHeight();  

     Paint paintTopLeft = new Paint(); 
     paintTopLeft.setStyle(Paint.Style.FILL); 
     paintTopLeft.setColor(Color.WHITE); 
     //canvas.drawPaint(paintTopLeft); // don't do that 
     // Use Color.parseColor to define HTML colors 
     paintTopLeft.setColor(Color.parseColor("#F44336")); 
     canvas.drawRect(0,0,x/2,y/2,paintTopLeft); 

     Paint paintTopRight = new Paint(); 
     paintTopRight.setStyle(Paint.Style.FILL); 
     paintTopRight.setColor(Color.WHITE); 
     // canvas.drawPaint(paintTopRight); // don't do that 
     // Use Color.parseColor to define HTML colors 
     paintTopRight.setColor(Color.parseColor("#2196F3")); 
     canvas.drawRect(x/2, 0, x, y/2, paintTopRight);  
    } 
} 
+0

Я только сделал 2, чтобы проверить код;) Но ваш код именно то, что я искал! Кроме того, спасибо за объяснение. – user3182261

+1

Кстати: структура Paint очень насыщена ресурсами на Android. Вы не должны создавать его снова и снова в onDraw. Вам лучше создать его в onInit или onCreate и удерживать его как частный член! – Matthias

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