Android自定义view贝塞尔曲线
作者:王三狗 发布时间:2023-04-09 07:51:22
标签:Android,贝塞尔曲线
本文实例为大家分享了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编程绘图操作之弧形绘制方法。分享给大家供大家参考,具体如下:/** * 绘制弧形图案 * @descriptio
- 首先分析下游戏界面内的元素:无限滚动的背景图, 可以操作的主角,主角的 * , 主角的血量,两种怪物(敌机),一个boss, boss的 * 效
- 简评:作为一位 Android 开发者,Android Studio 肯定是每天都要打交道的,熟练掌握其中的快捷键等技巧可以提高我们不少的效
- 本文介绍一些Java初学者常问的问题,可以用%除以一个小数吗? a += b 和 a = a + b 的效果有区别吗? 声明一个数组为什么需
- 1.RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不
- CSDN 的小伙伴们,大家好,我是沉默王二。重写(Overriding)算是 Java 中一个非常重要的概念,理解重写到底是什么对每个 Ja
- ArrayList底层实现是数组,访问元素效率高 (查询快,插入、修改、删除元素慢)与LinkedList相比,它效率高,但线程不安全。Ar
- 一、环形链表1、创建结点环形链表其实也很好理解,就是将单链表的头和尾连接起来,就形成了环形链表。public class Node { &n
- .NET中提供了读写Cookie的多种方法,Request.Cookies 是客户端通过 Cookie 标头形式由客户端传输到服务器的 Co
- 大家都知道Android Studio可以直接在“Menu - Check for Updates...”自动检测并更新版本,还可以在弹出的
- 今天,简单讲讲android里如何获取一个视频文件的第一帧作为缩略图显示在界面上。之前,我说个最近需要从服务器下载视频文件,但是下载后肯定需
- JSON字符串和java对象的互转【json-lib】在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML、JSON等,JSON
- 前言在工作中经常遇到C#数组、ArrayList、List、Dictionary存取数据,但是该选择哪种类型进行存储数据,对于初学者的我一直
- 本文实例为大家分享了PopupWindow+RecyclerView实现上下滑动框功能的具体代码,供大家参考,具体内容如下1.新建一个适配器
- 本文实例为大家分享了DataGridView带图标的单元格实现具体代码,供大家参考,具体内容如下目的:扩展 C# WinForm 自带的表格
- 1 常量定义在程序中存在大量的数据来代表程序的状态,其中有些数据在程序运行过程中值不能发生改变,这些数据在程序中被叫做常量。2 常量语法命名
- Task执行任务,等待任务完成代码://任务Func<int> Funcs = () =>{? ? Console.Wri
- Gradle 属性( Gradle build environment)[详细信息]("https://docs.gradle.o
- 一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对
- 在IDEA中配置log4j,步骤很简单1.在Maven中加入以下配置<dependency> <groupI