2013-10-01 2 views
3

Для игры Android холст я использую следующий способ (свернутом), чтобы запросить перерисовку SurfaceView:Android OnDraw() является suspicous вызов метода

private void refreshView() { 
     c = surfaceView.getHolder().lockCanvas(); 
     synchronized (surfaceView.getHolder()) { 
      surfaceView.onDraw(c); 
     } 

Но так как последний Android SDK (22.2.1) это дает мне предупреждение Lint на surfaceView.onDraw

подозрительного вызов метод; вероятно, следует назвать «рисовать», а не « OnDraw»

Когда я использую рисовать вместо OnDraw, экран остается черным. Когда я использую postInvalidate(), производительность рендеринга уменьшается.

Есть ли что-то, что я делаю неправильно? Есть ли лучший способ реализовать это?

+0

http://developer.android.com/ reference/android/view/SurfaceView.html - 'draw()' - документированный метод рендеринга холста для представления. – Simon

+0

@Simon Я знаю, но draw() не вызывает onDraw() в некотором роде. – Bas

ответ

3

По соглашению, методы из API Android, названные как On***, не должны вызываться непосредственно вашим кодом, а только самими ОС Android. Надеюсь, кто-то скажет вам, что использовать вместо этого в этой ситуации ...
Для производительности: если производительность может стать проблемой, почему бы вам не использовать OpenGL? (или библиотека, использующая OpenGL)

+0

Спасибо за информацию. Причина, по которой я использую canvas вместо OpenGL, заключается в том, что это действительно для игрового движка, и из-за внешних факторов рендеринг должен быть как можно более простым. – Bas

+0

@Bas Какие факторы? –

+0

Это не предназначено для профессионального использования, но чтобы люди, практически не имеющие опыта программирования, видели, как вы можете показывать простые объекты на экране и манипулировать (переопределять) его по-своему, если захотят. Для этого OpenGL просто избыток. – Bas

0

Я встречаю ту же ошибку. После того, как я изменил функцию onDraw на другое имя, т.е. Fix_onDraw, все в порядке.

2

Я знаю, что это не лучшее решение, но я использовал @SuppressLint("WrongCall"), чтобы избежать сообщения об ошибке.

+0

С Gradle: андроид { ... lintOptions { отключить 'WrongCall' }} (. У нас есть некоторый код, который должен сделать "неправильные" вызовы) –

1

Вместо OnDraw (с) использовать дро (с) и изменить метод OnDraw (холст холст), чтобы ничьи (холст холст) .hope это помогает

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