Android自定义view贝塞尔曲线
作者:王三狗 时间:2023-04-09 07:51:22
本文实例为大家分享了Android自定义view贝塞尔曲线,供大家参考,具体内容如下
贝塞尔曲线
以一个简单的贝塞尔曲线为例,二阶曲线原理
贝塞尔曲线很多功能都会用到,比如小火箭发射,再比如淘宝的购物车功能
所幸的是Android有封装好的贝塞尔曲线,我们直接拿过来用就可以了:
//二阶贝赛尔?
public void quadTo(float x1, float y1, float x2, float y2)?
public void rQuadTo(float dx1, float dy1, float dx2, float dy2)?
//三阶贝赛尔?
public void cubicTo(float x1, float y1, float x2, float y2,float x3, float y3)?
public void rCubicTo(float x1, float y1, float x2, float y2,float x3, float y3)
自定义view代码如下
public class MyView extends View {
? ? private Point controlPoint = new Point(200, 200);
? ? public MyView(Context context) {
? ? ? ? super(context);
? ? }
? ? public MyView(Context context, @Nullable AttributeSet attrs) {
? ? ? ? super(context, attrs);
? ? }
? ? public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
? ? ? ? super(context, attrs, defStyleAttr);
? ? }
? ? @Override
? ? protected void onDraw(Canvas canvas) {
? ? ? ? super.onDraw(canvas);
? ? ? ? Paint paint = new Paint();
// ? ? ? ?画笔设置描边
? ? ? ? paint.setStyle(Paint.Style.STROKE);
// ? ? ? ?颜色
? ? ? ? paint.setColor(Color.BLACK);
// ? ? ? ?描边宽度
? ? ? ? paint.setStrokeWidth(10);
//路径
? ? ? ? Path path = new Path();
// ? ? ? ?moveTo 不会进行绘制,只用于移动移动画笔。
? ? ? ? path.moveTo(100, 500);
//绘制贝塞尔曲线,controlPoint.x, controlPoint.y控制点和700, 500终点坐标
? ? ? ? path.quadTo(controlPoint.x, controlPoint.y, 700, 500);
? ? ? ? //绘制路径
? ? ? ? canvas.drawPath(path, paint);
? ? ? ? //绘制辅助点
? ? ? ? canvas.drawPoint(controlPoint.x,controlPoint.y,paint);
? ? }
? ? @Override
? ? public boolean onTouchEvent(MotionEvent event) {
? ? ? ? switch (event.getAction()) {
? ? ? ? ? ? case MotionEvent.ACTION_MOVE:
? ? ? ? ? ? ? ? controlPoint.x = (int) event.getX();
? ? ? ? ? ? ? ? controlPoint.y = (int) event.getY();
// ? ? ? ? ? ? invalidate();重绘 刷新
? ? ? ? ? ? ? ? invalidate();
? ? ? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? return true;
? ? }
}
来源:https://blog.csdn.net/qq_39286138/article/details/89840021
标签:Android,贝塞尔曲线
0
投稿
猜你喜欢
Android开发实战闹钟项目
2022-02-28 19:48:38
Spring Boot 单元测试JUnit的实践
2023-08-29 02:02:15
java网络爬虫连接超时解决实例代码
2022-02-02 06:57:28
spring cloud oauth2 feign 遇到的坑及解决
2022-06-15 13:06:06
Spring Boot深入排查 java.lang.ArrayStoreException异常
2023-07-11 16:31:27
android 实现APP中改变头像图片的实例代码
2021-11-02 20:39:58
java实现基于Tcp的socket聊天程序
2022-03-11 15:28:07
使用idea创建web框架和配置struts的方法详解
2022-11-14 14:21:52
Kotlin四大组件中的broadcast广播
2023-07-08 00:44:08
java 正则,object中两个方法的使用(详解)
2023-09-06 19:00:55
手写Java LockSupport的示例代码
2021-11-05 07:00:39
剑指Offer之Java算法习题精讲链表与字符串及数组
2022-10-03 19:10:17
Java画笔的简单实用方法
2021-11-01 05:38:10
maven依赖版本没有按照最短路径原则生效的解决方案
2023-04-04 20:49:09
Android编程防止进程被第三方软件杀死的方法
2021-08-01 01:52:46
android 自定义控件 自定义属性详细介绍
2022-08-05 12:19:41
RocketMQ源码解析broker 启动流程
2022-12-25 10:50:54
Android实现一个完美的倒计时功能
2022-04-12 11:28:02
JVM内存增强之逃逸分析
2022-01-23 00:22:08
C#操作DataGridView获取或设置当前单元格的内容
2022-04-01 14:44:25