水位下降
来源:互联网 发布:淘宝让上传身份证清关 编辑:程序博客网 时间:2024/03/28 22:26
<com.atsgg.customviewdemo09.WaveView
android:layout_width="match_parent"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
public class WaveView extends View {
private Paint mPaint;// 画笔对象
private Path mPath;// 路径对象
private int vWidth, vHeight;// 控件宽高
private float ctrX, ctrY;// 控制点的坐标
private float waveY;// 整个Wave顶部两端点的Y坐标,该坐标与控制点的Y坐标增减幅一致,以及
private float startX, endX;// 整个Wave的左端点,与右端点
private boolean isInc; // 判断控制点是该坐移还是右移,true为右移
public WaveView(Context context) {
this(context, null);
}
public WaveView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public WaveView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// 实例化画笔并设置参数
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
mPaint.setColor(0xFF00796B);
// 实例化路径
mPath = new Path();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
// 获取控件的宽高
vWidth = w;
vHeight = h;
// 计算端点Y坐标
waveY = 1 / 8F * vHeight;
// 计算控制点Y的坐标
ctrY = -1 / 16F * vHeight;
startX = -1 / 4F * vWidth;
endX = 1 / 4F * vWidth + vWidth;
}
@Override
protected void onDraw(Canvas canvas) {
/**
* 设置Path起点
* 注意我将Path的起点设置在了控件的外部看不到的区域
* 如果我们将起点设置在控件左端x=0的位置会使得贝塞尔曲线变得生硬
* 至于为什么刚才我已经说了
* 所以我们稍微让起点往“外”走点
*/
mPath.moveTo(startX, waveY);
/**
* 以二阶曲线的方式通过控制点连接位于控件右边的终点
* 终点的位置也是在控件外部
* 我们只需不断让ctrX的大小变化即可实现“浪”的效果
*/
mPath.quadTo(ctrX, ctrY, endX, waveY);
// mPath.cubicTo(ctrX, ctrY,
// (vWidth + 1 / 4F * vWidth) / 2, waveY - 1 / 8F * vHeight,
// vWidth + 1 / 4F * vWidth, waveY);
// 围绕控件闭合曲线
mPath.lineTo(endX, vHeight);
mPath.lineTo(startX, vHeight);
mPath.close();
canvas.drawPath(mPath, mPaint);
/**
* 当控制点的x坐标大于或等于终点x坐标时更改标识值
*/
if (ctrX >= endX) {
isInc = false;
}
/**
* 当控制点的x坐标小于或等于起点x坐标时更改标识值
*/
else if (ctrX <= startX) {
isInc = true;
}
// 根据标识值判断当前的控制点x坐标是该加还是减
ctrX = isInc ? ctrX + 20 : ctrX - 20;
if (ctrY <= vHeight) {
ctrY += 2;
waveY += 2;
}
mPath.reset();
invalidate();
}
}
private Paint mPaint;// 画笔对象
private Path mPath;// 路径对象
private int vWidth, vHeight;// 控件宽高
private float ctrX, ctrY;// 控制点的坐标
private float waveY;// 整个Wave顶部两端点的Y坐标,该坐标与控制点的Y坐标增减幅一致,以及
private float startX, endX;// 整个Wave的左端点,与右端点
private boolean isInc; // 判断控制点是该坐移还是右移,true为右移
public WaveView(Context context) {
this(context, null);
}
public WaveView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public WaveView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// 实例化画笔并设置参数
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
mPaint.setColor(0xFF00796B);
// 实例化路径
mPath = new Path();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
// 获取控件的宽高
vWidth = w;
vHeight = h;
// 计算端点Y坐标
waveY = 1 / 8F * vHeight;
// 计算控制点Y的坐标
ctrY = -1 / 16F * vHeight;
startX = -1 / 4F * vWidth;
endX = 1 / 4F * vWidth + vWidth;
}
@Override
protected void onDraw(Canvas canvas) {
/**
* 设置Path起点
* 注意我将Path的起点设置在了控件的外部看不到的区域
* 如果我们将起点设置在控件左端x=0的位置会使得贝塞尔曲线变得生硬
* 至于为什么刚才我已经说了
* 所以我们稍微让起点往“外”走点
*/
mPath.moveTo(startX, waveY);
/**
* 以二阶曲线的方式通过控制点连接位于控件右边的终点
* 终点的位置也是在控件外部
* 我们只需不断让ctrX的大小变化即可实现“浪”的效果
*/
mPath.quadTo(ctrX, ctrY, endX, waveY);
// mPath.cubicTo(ctrX, ctrY,
// (vWidth + 1 / 4F * vWidth) / 2, waveY - 1 / 8F * vHeight,
// vWidth + 1 / 4F * vWidth, waveY);
// 围绕控件闭合曲线
mPath.lineTo(endX, vHeight);
mPath.lineTo(startX, vHeight);
mPath.close();
canvas.drawPath(mPath, mPaint);
/**
* 当控制点的x坐标大于或等于终点x坐标时更改标识值
*/
if (ctrX >= endX) {
isInc = false;
}
/**
* 当控制点的x坐标小于或等于起点x坐标时更改标识值
*/
else if (ctrX <= startX) {
isInc = true;
}
// 根据标识值判断当前的控制点x坐标是该加还是减
ctrX = isInc ? ctrX + 20 : ctrX - 20;
if (ctrY <= vHeight) {
ctrY += 2;
waveY += 2;
}
mPath.reset();
invalidate();
}
}
0 0
- 水位下降
- 安卓水位上升下降文字
- 高水位
- oracle高水位,水位线
- 临场盘及水位
- oracle高水位线
- Oracle 高水位(HWM)
- Oracle高水位线
- oracle 移动高水位:
- oracle高水位线
- Oracle 高水位(HWM)
- Oracle 高水位(HWM)
- 高水位线
- Oracle 高水位 说明
- 高水位线HWM!
- 高水位 HWM
- 高水位问题
- Oracle高水位线
- leetcode/2017-1-1
- PHP 基础五
- .net窗体或控件透明效果
- 魅族手机权限开启方法5
- 史上最难oracle数据库练习题(附答案)
- 水位下降
- 数据库设计 从入门至初级
- Openstack 架构简述
- Android Studio: You need to use a Theme.AppCompat theme (or descendant) with this activity.
- <<大数据分析在流量调度的应用>>孙子荀
- 前端知识推荐
- java 生成验证码
- 手机端通过Es文件浏览器访问windows服务器用File Zilla Sever软件 分享的文件
- TCP三次握手及四次挥手详细图解