content: package yifeiyuan.practice.practicedemos.wave;
  
  import android.animation.Animator;
  import android.animation.AnimatorListenerAdapter;
  import android.animation.ObjectAnimator;
  import android.content.Context;
  import android.graphics.Canvas;
  import android.graphics.Paint;
  import android.util.AttributeSet;
  import android.view.View;
  
  import yifeiyuan.practice.practicedemos.R;
  
  /**
   * Created by alanchen on 15/7/2.
   */
  public class WaveView extends View {
  
  
      public WaveView(Context context) {
          super(context);
          init();
      }
  
      public WaveView(Context context, AttributeSet attrs) {
          super(context, attrs);
          init();
      }
  
      private void init() {
  
          mPaint = new Paint();
          mPaint.setColor(getResources().getColor(R.color.primary));
          mPaint.setAntiAlias(true);
  
      }
  
      private int currentHeight = 0;
  
      public void setCurrentHeight(int currentHeight) {
          this.currentHeight = currentHeight;
          invalidate();
      }
  
      public void startWave(int duration) {
          setVisibility(VISIBLE);
          ObjectAnimator waveAnimator = ObjectAnimator.ofInt(this, "currentHeight", 0, height).setDuration(duration);
          waveAnimator.addListener(new AnimatorListenerAdapter() {
              @Override
              public void onAnimationEnd(Animator animation) {
                  super.onAnimationEnd(animation);
              }
          });
          waveAnimator.start();
      }
      private void reset(){
  
      }
      private Paint mPaint;
      @Override
      protected void onDraw(Canvas canvas) {
          super.onDraw(canvas);
          int width = getWidth();
          for (int i = 0; i < width; i++) {
              canvas.drawLine(i,getHeight(),i,height-getYY(i),mPaint);
          }
      }
  
      private double width;
      private int height;
      @Override
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
          super.onMeasure(widthMeasureSpec, heightMeasureSpec);
          width = getMeasuredWidth();
          height = getMeasuredHeight();
      }
  
      private float getYY(double x) {
          double a  =x/width;
          return (float) (currentHeight*(Math.sin(2*Math.PI*a)+1));
      }
  }
  