自定义控件(31)---贝塞尔曲线
来源:互联网 发布:删除表数据 truncate 编辑:程序博客网 时间:2024/06/05 02:29
布局文件
<com.safly.myapplication.CustomeWaitingProgressBar2 android:id="@+id/skipView2" android:layout_width="fill_parent" android:layout_height="fill_parent"> </com.safly.myapplication.CustomeWaitingProgressBar2>
package com.safly.myapplication;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;public class CustomeWaitingProgressBar2 extends View { private Path mPath = new Path(); public CustomeWaitingProgressBar2(Context context) { super(context); } public CustomeWaitingProgressBar2(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN: Log.i("MotionEvent","ACTION_DOWN"); mPath.moveTo(event.getX(), event.getY()); return true; case MotionEvent.ACTION_MOVE: Log.i("MotionEvent","ACTION_MOVE"); mPath.lineTo(event.getX(), event.getY()); postInvalidate(); break; default: break; }// return true; 将ACTION_DOWN改成break; return super.onTouchEvent(event); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(2); canvas.drawPath(mPath,paint); } public void reset(){ mPath.reset(); invalidate(); }}
看看贝塞尔曲线实现的方式:
private float mPreX,mPreY; @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN:{ mPath.moveTo(event.getX(),event.getY()); mPreX = event.getX(); mPreY = event.getY(); return true; } case MotionEvent.ACTION_MOVE:{ float endX = (mPreX+event.getX())/2; float endY = (mPreY+event.getY())/2; mPath.quadTo(mPreX,mPreY,endX,endY); mPreX = event.getX(); mPreY =event.getY(); invalidate(); } break; default: break; } return super.onTouchEvent(event); }
public void rQuadTo(float dx1, float dy1, float dx2, float dy2)
dx1:控制点X坐标,表示相对上一个终点X坐标的位移坐标,可为负值,正值表示相加,负值表示相减; dy1:控制点Y坐标,相对上一个终点Y坐标的位移坐标。同样可为负值,正值表示相加,负值表示相减; dx2:终点X坐标,同样是一个相对坐标,相对上一个终点X坐标的位移值,可为负值,正值表示相加,负值表示相减; dy2:终点Y坐标,同样是一个相对,相对上一个终点Y坐标的位移值。可为负值,正值表示相加,负值表示相减;
比如,我们上一个终点坐标是(300,400)那么利用rQuadTo(100,-100,200,100);
得到的控制点坐标是(300+100,400-100)即(400,300)
同样,得到的终点坐标是(300+200,400+100)即(500,500)
所以下面这两段代码是等价的:
利用quadTo定义绝对坐标
path.moveTo(300,400); path.quadTo(400,300,500,500);--------path.moveTo(300,400); path.rQuadTo(100,-100,200,100)
0 0
- 自定义控件(31)---贝塞尔曲线
- Android自定义控件(二 .3)Path贝塞尔曲线
- Android-自定义贝塞尔曲线图表控件
- 自定义view进阶-贝塞尔曲线实现水波动画、粘性控件
- Unity GUI(uGUI)扩展实例:自定义曲线控件
- 自定义view走势图(三、贝塞尔曲线)
- 自定义视图-贝塞尔曲线
- 自定义贝塞尔曲线
- 自定义控件 实现曲线加载数据
- 自定义控件之二阶贝塞尔曲线方法详解
- 自定义控件仿QQ小红点,粘性控件,贝塞尔曲线绘制,值动画
- Android自定义View,贝塞尔曲线
- 自定义View之贝塞尔曲线
- Android自定义View-- 贝塞尔曲线
- Android 贝塞尔曲线自定义波浪
- 实时曲线控件(2)
- 自定义控件(8)---PathEffect平滑曲线--点、线、矩形、圆
- 带箭头的曲线(自定义的贝塞尔曲线和首次启动 app的引导界面)
- 父进程是init一定不会变僵尸进程吗?
- 分类(Classification):Probability Generative Model
- JS级联菜单
- CentOS 配置LAMP(Apache+MySQL+PHP)环境,并配置phpmyadmin
- 题目1113:二叉树 九度OJ
- 自定义控件(31)---贝塞尔曲线
- JSP四大作用域和跳转、重定向
- Servlet实现文件下载详解与实例
- 漫步数理统计十四——重要的不等式
- 命令行参数
- leetcode AddTwoNumbers 题解
- AndroidStudio强制转换快捷键
- 编写可靠shell脚本的八个建议
- 基于ORB特征提取算法图像匹配 python实现