Android学习之使用贝塞尔曲线实现波纹效果
来源:互联网 发布:深圳数据分析招聘 编辑:程序博客网 时间:2024/05/18 09:24
package com.lzy.host.perfect.view;import android.animation.ValueAnimator;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;import android.view.animation.LinearInterpolator;/** * 波纹效果实现View */public class WaveView extends View { //波浪画笔 private Paint mPaint; //测试红点画笔 private Paint mCyclePaint; //波浪Path类 private Path mPath; //一个波浪长度 private int mWaveLength = 1000; //波纹个数 private int mWaveCount; //平移偏移量 private int mOffset; //波纹的中间轴 private int mCenterY; //屏幕高度 private int mScreenHeight; //屏幕宽度 private int mScreenWidth; private ValueAnimator animator; public WaveView(Context context) { super(context); } public WaveView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public WaveView(Context context, AttributeSet attrs) { super(context, attrs); this.animator = ValueAnimator.ofInt(0, mWaveLength); mPath = new Path(); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setAntiAlias(true); mPaint.setColor(Color.BLUE); mPaint.setStrokeWidth(5); mPaint.setStyle(Paint.Style.STROKE); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mScreenHeight = h; mScreenWidth = w; //加1.5:至少保证波纹有2个,至少2个才能实现平移效果 mWaveCount = (int) Math.round(mScreenWidth / mWaveLength + 1.5); mCenterY = mScreenHeight / 2; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPath.reset(); //移到屏幕外最左边 mPath.moveTo(-mWaveLength + mOffset, mCenterY); for (int i = 0; i < mWaveCount; i++) { //正弦曲线 mPath.quadTo((-mWaveLength * 3 / 4) + (i * mWaveLength) + mOffset, mCenterY + 60, (-mWaveLength / 2) + (i * mWaveLength) + mOffset, mCenterY); mPath.quadTo((-mWaveLength / 4) + (i * mWaveLength) + mOffset, mCenterY - 60, i * mWaveLength + mOffset, mCenterY); } //填充矩形// mPath.lineTo(mScreenWidth, mScreenHeight);// mPath.lineTo(mScreenWidth + mWaveLength, mCenterY);// mPath.close(); canvas.drawPath(mPath, mPaint); } public void start(long interval) { animator.setDuration(interval); animator.setRepeatCount(ValueAnimator.INFINITE); animator.setInterpolator(new LinearInterpolator()); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { mOffset = (int) animation.getAnimatedValue(); postInvalidate(); } }); animator.start(); } public void stop() { if (this.animator != null) { this.animator.cancel(); } }}
package com.lzy.host.perfect.demo;import android.os.Bundle;import android.widget.TextView;import com.lzy.host.perfect.R;import com.lzy.host.perfect.activity.BaseActivity;import com.lzy.host.perfect.view.WaveView;/** * 波纹效果 * * @author linzhiyong * @time 2017年1月16日17:07:18 * @desc * */public class WaveViewDemoActivity extends BaseActivity { private TextView topTitleView; private WaveView waveView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wave_demo); topTitleView = (TextView) findViewById(R.id.base_top_title); topTitleView.setText("波纹效果"); waveView = (WaveView) findViewById(R.id.waveView); waveView.start(1500); } @Override protected void onDestroy() { if (waveView != null) { waveView.stop(); } super.onDestroy(); }}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/main_gray" android:clipToPadding="true" android:fitsSystemWindows="true" android:orientation="vertical"> <include layout="@layout/base_top_title" /> <com.lzy.host.perfect.view.WaveView android:id="@+id/waveView" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
1 0
- Android学习之使用贝塞尔曲线实现波纹效果
- Android贝塞尔曲线-波纹(波浪)效果
- Android之实现点击波纹效果
- android实现波纹效果
- Android点波纹效果实现
- Android开发之使用贝塞尔曲线实现黏性水珠下拉效果
- Android 设置主题实现点击波纹效果
- Android 设置主题实现点击波纹效果
- Android实现控件点击波纹扩散效果
- Android 设置主题实现点击波纹效果
- 使用CSS实现按钮点击波纹效果
- 自定义View学习之锯齿波纹效果
- android 使用贝塞尔曲线实现“波浪”效果思路解析
- Android中水波纹使用之自定义视图实现
- 实现波纹效果
- android点击波纹效果
- Android贝塞尔曲线实现Loading效果
- CSS 使用 贝塞尔曲线 碰撞效果实现
- Linux 启动 ./XX.sh 文件
- java单例
- 使用 Rx 中预定义的 Subject
- jsp中的<%=表达式%>和<%表达式%>有什么区别?
- Spring MVC之@RequestBody, @ResponseBody 详解
- Android学习之使用贝塞尔曲线实现波纹效果
- Vue学习(day1)
- C++中的多态
- java 启动 XX.bar 文件
- 润乾行式填报表_资料查阅凭证登记表
- python学习1——标示符、关键字、输出、输入、运算符、赋值、取整取余的作用、判断语句
- Hive学习(一)-表及数据库的创建删除基本操作
- 发送邮件的Util
- DPS pin为什么需要挂电容