版权声明:本文为宠歆小王子的原创文章,未经宠歆小王子允许不得转载。 https://blog.csdn.net/qq_41698379/article/details/82960682

//主的

public class MainActivity extends AppCompatActivity {

    private WaveViewActivity wave;
    private ImageView img_cur;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        wave = findViewById(R.id.wave);
        img_cur = findViewById(R.id.img_cur);

        WaveViewActivity.OnWaveViewListener listener = new WaveViewActivity.OnWaveViewListener() {
            @Override
            public void onChanged(float y) {
                RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) img_cur.getLayoutParams();
                layoutParams.setMargins(0,0,0, (int) y);
                img_cur.setLayoutParams(layoutParams);
            }
        };
        wave.setOnWaveViewListener(listener);
    }
}

//view

public class WaveViewActivity extends View {

    private float fai = 0;
    private Paint paint1;
    private Paint paint2;
    private Path path1;
    private Path path2;
    private DrawFilter drawFilter;

    public interface OnWaveViewListener{
        void onChanged(float y);
    }
    private OnWaveViewListener listener;

    public void setOnWaveViewListener(OnWaveViewListener listener) {
        this.listener = listener;
    }

    public WaveViewActivity(Context context) {
        this(context,null);
    }

    public WaveViewActivity(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs,0);
    }

    public WaveViewActivity(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {

        //给两个画笔
        paint1 = new Paint();
        paint1.setColor(Color.WHITE);
        paint1.setAntiAlias(true);
        paint1.setStyle(Paint.Style.FILL);
        paint1.setStrokeWidth(5);

        paint2 = new Paint();
        paint2.setColor(Color.WHITE);
        paint2.setStyle(Paint.Style.FILL);
        paint2.setAntiAlias(true);
        paint2.setStrokeWidth(5);
        paint2.setAlpha(60);

        //画两个路径
        path1 = new Path();
        path2 = new Path();


        drawFilter = new PaintFlagsDrawFilter(0,Paint.FILTER_BITMAP_FLAG | Paint.ANTI_ALIAS_FLAG);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        double Ω = 2 * Math.PI / getMeasuredWidth();
//        欧米伽
        canvas.setDrawFilter(drawFilter);

        fai -=0.1f;//给个值

        //定义高度
        int A= getMeasuredHeight() / 2;
        //重置一下
        path1.reset();
        path2.reset();

        path1.moveTo(getLeft(),getBottom());
        path2.moveTo(getLeft(),getBottom());

        //开始画
        for (int x = 0; x <= getMeasuredWidth(); x += 20) {
//            根据 float y = Asin(Ωx+φ) + k
            float y1 = A * (float) Math.sin(Ω * x +fai) + A ;
            float y2 = -A * (float) Math.sin(Ω * x +fai) + A ;
            if (x > getMeasuredWidth() / 2 - 10 &&  x < getMeasuredWidth() / 2 + 10 ){
                listener.onChanged(y2);
            }
            path1.lineTo(x,y1);
            path2.lineTo(x,y2);
        }
        //在哪停止
        path1.lineTo(getWidth(),getBottom());
        path2.lineTo(getWidth(),getBottom());

        canvas.drawPath(path1,paint1);
        canvas.drawPath(path2,paint2);

        postInvalidateDelayed(88);
    }
}

//布局的

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.bwie.wang.MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="#ff0000">
        <com.bwie.wang.WaveViewActivity
            android:id="@+id/wave"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_alignParentBottom="true"
            />
        <ImageView
            android:id="@+id/img_cur"
            android:layout_width="88dp"
            android:layout_height="88dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:src="@drawable/decr"<!--图片自己去找-->
            />
    </RelativeLayout>

</LinearLayout>

猜你喜欢

转载自blog.csdn.net/qq_41698379/article/details/82960682
今日推荐