2015-06-28 3 views
1

В моем приложении я создаю класс LinearLayout, переопределяющий LinearLayout, чтобы программно устанавливать границы вокруг него и другие графики по требованию (т. Е. Заполнять пользовательский цвет). Проблема заключается в том, что в первой строке OnDraw я должен получить макет Rect следующим образом:Как избежать создания объекта Rect onDraw

@Override 
protected void onDraw(Canvas canvas) { 
    r = canvas.getClipBounds() ; 

Проблема заключается в том, что я получаю предупреждение: распределения объектов

Избегайте при вытяжке операций: Использование Canvas. getClipBounds (Rect) вместо Canvas.getClipBounds(), который выделяет временное Rect.

Хотя я понимаю, что приведенный выше код тратить ресурсы памяти, я не могу найти способ применить вместо Canvas.getClipBounds (Rect) сделать то же самое. Я был бы признателен, если бы кто-то указывал на меня, как сделать это более дружелюбно.

Заранее спасибо.

ответ

3

Создайте свой Rect, когда конструктор вашего вида вызывается или объявляется и создает экземпляр в одно и то же время. Например.

Rect mRect = new Rect(); 

и onDraw

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.getClipBounds(mRect) ; 
    // read the properties of mRect 
+0

Так простое решение, спасибо. – Epaminondas

+0

Добро пожаловать – Blackbelt

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