網(wǎng)站首頁 編程語言 正文
本文實例為大家分享了Android自定義view貝塞爾曲線,供大家參考,具體內(nèi)容如下
貝塞爾曲線
以一個簡單的貝塞爾曲線為例,二階曲線原理
貝塞爾曲線很多功能都會用到,比如小火箭發(fā)射,再比如淘寶的購物車功能
所幸的是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 不會進行繪制,只用于移動移動畫筆。
? ? ? ? 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
相關(guān)推薦
- 2022-06-02 ubuntu安裝jupyter并設(shè)置遠程訪問的實現(xiàn)_python
- 2022-05-25 在Windows平臺安裝Jenkins_win服務(wù)器
- 2022-08-11 C++簡明講解缺省參數(shù)與函數(shù)重載的用法_C 語言
- 2022-09-22 k8s 存儲卷之 PV & PVC
- 2022-08-13 VMware vCenter 無法創(chuàng)建自定義規(guī)范
- 2022-08-04 scrapy中的spider傳參實現(xiàn)增量的方法_python
- 2022-06-22 C#使用Dictionary<string,?string>拆分字符串與記錄log方法_
- 2022-08-23 C++?primer超詳細講解泛型算法_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支