效果图
第一步:新建文件WaveView 继承View
package com.rong.activity;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DrawFilter;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
/**
* 自定义控件实现波浪效果
* @author 徐荣
*
*/
public class WaveView extends View {
//画笔
private Paint mPaint;
//抗锯齿
private DrawFilter mDrawFilter;
//屏宽
private int screenWidth;
//屏高
private int screenHeight;
//波浪点的列表
private List postions;
//临时列表
private List temps = new ArrayList();
//循环周期
private float mCycle;
//浪高
private int WAVEHEIGHT = 100;
//速度
private int mSpeed = 20;
public WaveView(Context context, AttributeSet attrs) {
super(context, attrs);
//初始化画笔
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setColor(Color.BLUE);
mDrawFilter = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
//获取屏幕宽高
screenWidth = getMeasuredWidth();
screenHeight = getMeasuredHeight();
//初始化周期
mCycle = (float) (2 * Math.PI / screenWidth);
postions = new ArrayList();
for (int i = 0; i
//初始化波浪点
float position = (float) (WAVEHEIGHT * Math.sin(mCycle * i) + 0);
postions.add(position);
Log.i("position", i + "==" + position);
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//draw
canvas.setDrawFilter(mDrawFilter);
drawWave(canvas);
}
public void drawWave(Canvas canvas) {
for (int i = 0; i
//话竖线
canvas.drawLine(i, screenHeight - postions.get(i) - 2 * WAVEHEIGHT, i, screenHeight, mPaint);
}
//清空临时数据
temps.clear();
int nowPosition = 0;
Iterator iterator = postions.iterator();
while (iterator.hasNext()) {
//交换临时点的位置
temps.add(iterator.next());
iterator.remove();
nowPosition = nowPosition + 1;
if (nowPosition == mSpeed) {
break;
}
}
postions.addAll(temps);
//重绘,会调用OnDraw方法
invalidate();
}
}
第二步新建布局文件activity_main.xml
android:id="@+id/main_touchlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical" >
android:id="@+id/main_touchview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"/>