2017-01-21 6 views
0

У меня довольно простой класс, который рисует круги. Я даю параметр, просмотр вычисляет остальное. Все, что я хочу дать задержка и эффект затухания для каждого во время рисования на холст. Я просмотрел несколько статей об аниматорах и обработчиках, но я не мог понять. Пожалуйста, покажите мне некоторые варианты. Благодарю.Android Custom View Fade/Delay Animation

@Override 
protected void onDraw(final Canvas canvas) { 
    super.onDraw(canvas); 
    int w = getWidth(); 
    int pl = getPaddingLeft(); 
    int pr = getPaddingRight(); 
    int totalWidth = w - (pl + pr); 
    major = totalWidth/circleCount; 
    radius = major/2; 
    startPoint = totalWidth/(circleCount * 2); 
    for (int i = 0; i < circleCount; i++) { 
     canvas.drawCircle(startPoint + major * i, radius, radius, paint); 
    } 
} 

enter image description here

ответ

0

Вот простой альфа-анимация зрения кнопки [он делает кнопку мигания] (это не так трудно; O)):

import android.view.animation.AlphaAnimation; 
import android.view.animation.Animation; 
import android.view.animation.LinearInterpolator; 

final Animation animation = new AlphaAnimation(1, 0); // Change alpha from fully visible to invisible 
animation.setDuration(500); // duration - half a second 
animation.setInterpolator(new LinearInterpolator()); // do not alter animation rate 
animation.setRepeatCount(Animation.INFINITE);  // Repeat animation infinitely 
animation.setRepeatMode(Animation.REVERSE);   // Reverse animation at the end so the button will fade back in 

final Button btn = (Button) findViewById(R.id.but4);//replace this with your view 
btn.startAnimation(animation); 
+0

Я пытаюсь в пользовательском классе просмотра? На самом деле зрения нет. У меня есть только холст, поэтому canvas не имеет метода startAnimation. Посмотрите мой код. Я знаю альфа-анимацию, как она работает в обычном режиме – user3792834

0

Вы можете использовать setAlpha(int a) метод из класса Paint. Он должен работать, когда вы делаете это в отдельной теме с небольшой задержкой времени в цикле, где вы отсчитываете от 255 до 0.

Вот пример кода, где я пробовал это для более ранних версий Android несколько лет назад :

private final int FADE_TIME = 10; // modify to your needs 

private void fade() { 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 

      try { 
       int i = 255; 

       while (i >= 0) { 

        paint.setAlpha(i); 
        Thread.sleep(FADE_TIME); 
        i--; 
       } 


      } catch (InterruptedException e) { 
       // do something in case of interruption 
      } 
     } 
    }).start(); 

} 

в настоящее время я бы, вероятно, использовать Handler с postDelayed() для этой работы, но это должно дать вам представление о том, как это можно сделать.