自定义view知识点

public class WaterView extends View {

    private Paint mBottomPaint;
    private Paint mTopPaint;
    private Path mPathBottom;
    private Path mPathTop;

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

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

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

    float a;

    private void init(Context context) {
        mPathTop = new Path();
        mPathBottom = new Path();
        //创建两个画笔
        mTopPaint = new Paint();
        mTopPaint.setColor(Color.BLUE);
        mTopPaint.setAntiAlias(true);


        mBottomPaint = new Paint();
        mBottomPaint.setColor(Color.YELLOW);
        mBottomPaint.setAntiAlias(true);
        mBottomPaint.setAlpha(60);
        //创建两个路径


        //重写画
    }

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

        //设置路径的起点与终点
        mPathTop.moveTo(getLeft(), getBottom());
        mPathBottom.moveTo(getLeft(), getBottom());


        //设置路径轨迹
        a -= 0.1f;
        double mY = Math.PI * 2 / getWidth();
        for (int i = 0; i < getWidth(); i += 20) {
            float y, y0;
            y = (float) (10 * (Math.cos(mY * i + a)) + 20);
            y0 = (float) (10 * (Math.sin(mY * i + a)) + 10);
            mPathTop.lineTo(i, y);
            listener.onChange(y);
            mPathBottom.lineTo(i, y0);
        }

        //设置路径终点
        mPathTop.lineTo(getRight(), getBottom());
        mPathBottom.lineTo(getRight(), getBottom());
        //设置好路径开始画
        canvas.drawPath(mPathTop, mTopPaint);
        canvas.drawPath(mPathBottom, mBottomPaint);
        //ivaladate重复调用ondraw
        postInvalidateDelayed(20);
    }

    private onWaveChangeListener listener;

    public void setWaveChangeLitener(onWaveChangeListener litener) {
        this.listener = litener;
    }

    public interface onWaveChangeListener {
        void onChange(float y);
    }
}

 

 

public class MainActivity extends AppCompatActivity {

    private ImageView ivLogo;
    private WaterView waveView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ivLogo = findViewById(R.id.iv_logo);
        waveView = findViewById(R.id.wave_view);
        final RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) ivLogo.getLayoutParams();
        WaterView.onWaveChangeListener listener = new WaterView.onWaveChangeListener() {
            @Override
            public void onChange(float y) {
                layoutParams.setMargins(0, 0, 0, (int) y);
                ivLogo.setLayoutParams(layoutParams);
            }
        };
        waveView.setWaveChangeLitener(listener);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值