2013-07-31 6 views
0

Я хочу нарисовать круг в холсте. Я использую функцию для выполнения id:Почему этот код работает только один раз [Android-canvas]

 public static void add() 
     { 
      float a = 20 + (new Random()).nextInt(width-40); 
      float b = 20 + (new Random()).nextInt(height-40); 


      paint.setColor(Color.rgb(13, 13, 13)); 
      c.drawCircle(a, b, r, paint); 

      paint.setColor(Color.rgb(119, 119, 119)); 
      c.drawCircle(a, b, r-3, paint); 
     } 

Он работает только один раз, когда он вызван из «onDraw».

p.s. краска, ширина, высота, c - общепринятая вариабельность.

UPD .:

protected void onDraw(Canvas canv) 
    { 
     super.onDraw(canv); 
     c = canv; 
     paint = new Paint(); 
     paint.setStyle(Paint.Style.FILL); 
     paint.setAntiAlias(true); 
     paint.setColor(Color.WHITE); 
     c.drawPaint(paint); 
     add(); 
    } 
+0

переместите чертеж в 'onDraw' и вызовите' invalidate() 'для обновления/обновления. – Raghunandan

ответ

0

onDraw() будет вызываться всякий раз, когда вид должен перерисовать себя. Это может быть вызвано многими причинами, такими как изменение компоновки, прокрутка и т. Д.

Вы также можете позвонить invalidate() на экране, чтобы вызвать повторную ничью.

Если вы собираетесь нарисовать с очень высокой скоростью, например, при рисовании прикосновений или в некоторых играх и т. Д., Вместо этого используйте вместо этого TextureView.

0

Я сделал это следующим образом.

1) Определите пользовательский вид.

2) по методу onDraw, создайте/покажите круг.

3) вызов метода invalidate() в последней строке метода onDraw пользовательского представления.

дайте мне знать, если он работает

+0

1) У меня есть класс класса. Все функции этого класса 2) Я добавляю метод onDraw к сообщению 3) Мне нужно рисовать круги не один раз, а при касании (функция «добавлять» вызовы при касании) Как я могу это сделать? Я не понимаю третьего совета. – pvl