自定义View练习(二)二阶贝塞尔曲线
来源:互联网 发布:王健林 鲁豫 知乎 编辑:程序博客网 时间:2024/05/21 07:55
这是我们要实现的效果
要用到的方法:
贝塞尔曲线quadTo, cubicTo分别为二次和三次贝塞尔曲线的方法
二阶贝塞尔曲线
quadTo(float x1, float y1, float x2, float y2)
其中,x1、x2 为控制点的坐标 ( x1,x2 ),x2、y2 为终点的坐标 ( x2,y2 )。
直接代码送上,注释都在代码里
三阶的贝塞尔曲线虽然没有在这里用到,不过也说一下方法
cubicTo(float x1, float y1, float x2, float y2, float x3, float y3)其中,x1、x2 为控制点1的坐标 ( x1,x2 ),x2、y2 为控制点2的坐标 ( x2,y2 ),x3、y3 为终点的坐标 ( x3,y3 )。
好了,现在直接上干货,二阶贝塞尔曲线的代码
public class Bezier extends View { private Paint mPaint; private int centerX, centerY; //记录起点、终点、控制点 private PointF start, end, control; public Bezier(Context context) { super(context); //初始化paint mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setColor(Color.BLUE); mPaint.setStyle(Paint.Style.STROKE); mPaint.setTextSize(60); start = new PointF(0, 0); end = new PointF(0, 0); control = new PointF(0, 0); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); centerX = w / 2; centerY = h / 2; //初始化数据点和控制点的位置 start.x = centerX - 400; start.y = centerY + 400; end.x = centerX + 400; end.y = centerY - 400; control.x = centerX; control.y = centerY + 200; } @Override public boolean onTouchEvent(MotionEvent event) { //根据触摸位置更新控制点,并重绘 control.x = event.getX(); control.y = event.getY(); invalidate(); return true; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //绘制数据点和控制点 mPaint.setColor(Color.BLACK); mPaint.setStrokeWidth(11); canvas.drawPoint(start.x, start.y, mPaint); canvas.drawPoint(end.x, end.y, mPaint); canvas.drawPoint(control.x, control.y, mPaint); //绘制辅助线 mPaint.setStrokeWidth(4); canvas.drawLine(start.x, start.y, control.x, control.y, mPaint); canvas.drawLine(control.x, control.y, end.x, end.y, mPaint); //绘制二阶贝塞尔曲线 mPaint.setColor(Color.RED); mPaint.setStrokeWidth(8); Path path = new Path(); path.moveTo(start.x, start.y); path.quadTo(control.x, control.y, end.x, end.y); canvas.drawPath(path, mPaint); }}
然后在 MainActivity 里调用
package com.example.alltest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { private Bezier view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); view = new Bezier(this); setContentView(view); }}
源码下载:http://download.csdn.net/download/chendorid/9793875
0 0
- 自定义View练习(二)二阶贝塞尔曲线
- android自定义View基础系列二(贝塞尔曲线)
- 新手自定义view练习实例之(二) 波浪view
- 54.自定义View练习(二)简易折线图控件
- 自定义view走势图(三、贝塞尔曲线)
- 自定义view(二)
- 自定义view(二)
- 自定义View(二)
- 自定义View(二)
- 自定义View(二)
- 自定义View (二)
- 自定义View(二)
- Android自定义View画曲线
- Android自定义View,贝塞尔曲线
- 自定义View之贝塞尔曲线
- Android自定义View-- 贝塞尔曲线
- android自定义View贝赛尔曲线
- android 自定义view(二),继承view
- windows平台搭带c++扩展的nodejs环境
- ES7中的异步编程,虽然我ES6还没有学会
- 2017.03.25暑期实习在线笔试
- jquery事件冒泡,阻止事件冒泡
- Spring MVC Josn格式注解
- 自定义View练习(二)二阶贝塞尔曲线
- XE5开发Android程序调用电话相关功能(短信息和电话)
- Java读取配置文件的各种方式
- jvm_demo_TestDeadThread
- mysql基本操作,创建、插入、修改默认字符集
- Hive安装&初体验
- hdu 4282
- select、poll、epoll之间的区别总结[整理]
- 学习Linux的几点忠告