布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/water"
android:text="水波纹"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
Activity
package com.example.www.water;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.water).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.water:
start(Main2Activity.class);
break;
}
}
private void start(Class cls) {
startActivity(new Intent(this,cls));
}
}
水波纹布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context=".Main2Activity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="100dp">
<ImageView
android:id="@+id/imageview"
android:layout_width="100dp"
android:layout_centerHorizontal="true"
android:src="@mipmap/ic_launcher"
android:layout_height="100dp" />
</RelativeLayout>
<com.example.www.water.WaterView
android:id="@+id/water"
android:layout_width="match_parent"
android:layout_height="20dp" />
</LinearLayout>
Mian2Actiity
package com.example.www.water;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class Main2Activity extends AppCompatActivity {
private ImageView imageView;
private WaterView waterView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
imageView = findViewById(R.id.imageview);
waterView = findViewById(R.id.water);
waterView.setAnimatorListener(new WaterView.AnimatorListener() {
@Override
public void Animator(float y) {
RelativeLayout.LayoutParams params= (RelativeLayout.LayoutParams) imageView.getLayoutParams();
params.setMargins(0,(int)y,0,0);
imageView.setLayoutParams(params);
}
});
}
}
记录 水波纹 开始 记录 结束位置,以及浮动的大小
package com.example.www.water;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;
public class WaterView extends View {
private Paint paint;
private Path path;
private float mx;
private AnimatorListener mAnimatorListener;
public WaterView(Context context) {
super(context);
init(context);
}
public WaterView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
paint = new Paint();//画笔
path = new Path();
paint.setColor(Color.CYAN);//颜色
paint.setStrokeWidth(5);//画笔粗细
paint.setAntiAlias(true);//逆齿
}
//绘制
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//重置路径
path.reset();
//记录起始位置
path.moveTo(getLeft(),getBottom());
//记录波动位置
float mpi=(float) Math.PI*2/getRight();//获取去每一个宽度所占的度数
mx -= 0.1f;
for (int x=0;x<=getRight();x+=20){
float y=(float) (10*Math.sin(mpi*x+mx)+10);
path.lineTo(x, y);
// float y=(float) (10*Math.sin(mpi*x)+10);
// path.lineTo(x,y);
if(mAnimatorListener!=null){
mAnimatorListener.Animator(y);
}
}
//记录结束位置
path.lineTo(getRight(),getBottom());
canvas.drawPath(path,paint);
//定时刷新
postInvalidateDelayed(20);
}
public void setAnimatorListener(AnimatorListener mAnimatorListener){
this.mAnimatorListener=mAnimatorListener;
}
public interface AnimatorListener{
void Animator(float y);
}
}