Android实现波浪球效果

波浪球的效果一直都是想模仿的对象,在最近一段时间里模仿了这一界面,其实所用知识并不多。

Android实现波浪球效果_第1张图片

Android实现波浪球效果_第2张图片

1)、波浪的效果是利用三角函数来实现的,在自定义view中创建容量为width的数组,由y=Asin(Kx+T)+H得到每个x相对应的y值,然后存入数组里面。

2)、利用Android中Canvas提供的drawLine来从上部向下画线,每个像素上画完线之后就组成了图像。

3)、自定义view中的变量都与width建立了比例关系,可以任意大小,且效果一致。

4)、分别对y=Asin(Kx+T)+H中的T与H做valueAnimation的数字动画,就能实现波浪和上升的效果。

5)、利用Android中Paint的setXfermode来实现圆形效果。

6)、给外部提供了外部接口,可以对内部状态进行改变。

具体代码如下:

1 界面XML代码:



 
  

2、waveView的java代码:

package com.example.app_switchbutton;
 
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.pm.ProviderInfo;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
 
/**
 * Created by 尽途 on 2017/4/30.
 */
 
public class waveView extends View {
  private int widthSize;
  private int heightSize;
  private float[] mContentOneYs=null;
  private float[] mContentTwoYs=null;
  private float[] restoreOnes=null;
  private float[] restoreTwos=null;
  private float n=0.5f;
  private int SWINGONE;
  private int SWINGTWO;
  private int OFFSETONE=0;
  private int OFFSETTWO=0;
  private Paint mPaint1;
  private Paint mPaint2;
  private Paint circlePaint;
  private Canvas bitmapCanvas;
  private Bitmap bitmap;
  private float endValue;
 
 
  public waveView(Context context){
    super(context);
    init();
  }
  public waveView(Context context, AttributeSet attributeSet){
    super(context,attributeSet);
    init();
  }
  private void init(){
    mPaint1=new Paint();
    mPaint1.setColor(Color.parseColor("#AB9DCF"));
    mPaint1.setStrokeWidth(4);
    mPaint1.setAlpha(240);
    mPaint1.setStyle(Paint.Style.FILL);
    mPaint1.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
 
    mPaint2=new Paint();
    mPaint2.setColor(Color.parseColor("#A2D1F3"));
    mPaint2.setStrokeWidth(4);
    mPaint2.setAlpha(240);
    mPaint2.setStyle(Paint.Style.FILL);
    mPaint2.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
 
    circlePaint=new Paint();
    circlePaint.setAntiAlias(true);
    circlePaint.setColor(Color.GRAY);
    // circlePaint.setAlpha(56);
 
  }
 
  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    widthSize=MeasureSpec.getSize(widthMeasureSpec);
    heightSize=widthSize;
    setMeasuredDimension(widthSize,heightSize);
 
    bitmap=Bitmap.createBitmap(widthSize,heightSize, Bitmap.Config.ARGB_8888);//实现圆球效果
    bitmapCanvas=new Canvas(bitmap);
    SWINGONE=widthSize/20;
    SWINGTWO=widthSize/10;
  }
 
  @Override
  protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    getPoints();
  }
  private void getPoints(){
    mContentOneYs=new float[widthSize];
    mContentTwoYs=new float[widthSize];
    restoreOnes=new float[widthSize];
    restoreTwos=new float[widthSize];
    for (int i=0;i 
 

3、waveActivity的java代码:  

package com.example.app_switchbutton;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
 
public class WaveViewActivity extends AppCompatActivity {
  private Button begainButton;
  private waveView waveview;
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_wave_view);
    waveview=(waveView)findViewById(R.id.waveview);
    begainButton=(Button)findViewById(R.id.begainButtton);
    begainButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        waveview.begainAnimation();
      }
    });
  }
}

在此也多些网上的老前辈的学习代码。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(Android实现波浪球效果)