網(wǎng)站首頁 編程語言 正文
本文實(shí)例為大家分享了Android自定義view貝塞爾曲線,供大家參考,具體內(nèi)容如下
貝塞爾曲線
以一個(gè)簡(jiǎn)單的貝塞爾曲線為例,二階曲線原理
貝塞爾曲線很多功能都會(huì)用到,比如小火箭發(fā)射,再比如淘寶的購(gòu)物車功能
所幸的是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();
// ? ? ? ?畫筆設(shè)置描邊
? ? ? ? paint.setStyle(Paint.Style.STROKE);
// ? ? ? ?顏色
? ? ? ? paint.setColor(Color.BLACK);
// ? ? ? ?描邊寬度
? ? ? ? paint.setStrokeWidth(10);
//路徑
? ? ? ? Path path = new Path();
// ? ? ? ?moveTo 不會(huì)進(jìn)行繪制,只用于移動(dòng)移動(dòng)畫筆。
? ? ? ? path.moveTo(100, 500);
//繪制貝塞爾曲線,controlPoint.x, controlPoint.y控制點(diǎn)和700, 500終點(diǎn)坐標(biāo)
? ? ? ? path.quadTo(controlPoint.x, controlPoint.y, 700, 500);
? ? ? ? //繪制路徑
? ? ? ? canvas.drawPath(path, paint);
? ? ? ? //繪制輔助點(diǎn)
? ? ? ? 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
相關(guān)推薦
- 2022-09-19 C語言數(shù)據(jù)結(jié)構(gòu)之單鏈表存儲(chǔ)詳解_C 語言
- 2023-04-18 C#?TabControl手動(dòng)觸發(fā)DrawItem的實(shí)現(xiàn)_C#教程
- 2022-07-07 Python數(shù)據(jù)分析之?Matplotlib?3D圖詳情_python
- 2023-10-09 雙token登錄
- 2022-02-24 Matlab中plot函數(shù)及l(fā)egend函數(shù)詳解
- 2022-05-22 jQuery常用事件方法mouseenter+mouseleave+hover_jquery
- 2022-09-08 Go語言中的包Package詳解_Golang
- 2024-03-15 npm install報(bào)錯(cuò) Fix the upstream dependency conflict
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支