本文主要是介绍三阶贝塞尔曲线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
实现原理
实现三阶贝塞尔曲线须知四个点点坐标,起点P0(x,y), 控制点P1(x,y),终点P2(x,y)
P3(x,y),其中p1和p2是两个控制点,相比二阶贝塞尔曲线多了一个控制点,
示例
/*** 三阶贝塞尔曲线** 需要两个控制点**/
public class BSE3View extends View {/*起点*/int startPointX;int startPointY;/*控制点*/int con1PointX ;int con1PointY ;int con2PointX ;int con2PointY ;/*终点*/int endPiontX;int endPiontY;/*曲线*/Path path;/*画笔*/Paint paint;public BSE3View(Context context) {this(context,null);}public BSE3View(Context context, AttributeSet attrs) {this(context, attrs,0);}public BSE3View(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);initPaint();}private void initPaint() {path = new Path();paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.setDither(true);paint.setAntiAlias(true);paint.setColor(getContext().getResources().getColor(R.color.colorPrimaryDark));paint.setStrokeWidth(10);paint.setStrokeCap(Paint.Cap.ROUND);paint.setStyle(Paint.Style.FILL_AND_STROKE);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);startPointX = 0 ;startPointY = h / 2;endPiontX = w ;endPiontY = h / 2;con1PointX = w / 5;con1PointY = h /4 ;con2PointX = w * 4 / 5 ;con2PointY = h /4;}boolean isTowFinger;@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()){case MotionEvent.ACTION_POINTER_DOWN:isTowFinger = true ;break;case MotionEvent.ACTION_POINTER_UP:isTowFinger = false ;break;case MotionEvent.ACTION_MOVE:con1PointX = (int) event.getX(0);con1PointY = (int) event.getY(0);if (isTowFinger){con2PointX = (int) event.getX(1);con2PointY = (int) event.getY(1);}break;}invalidate();return true;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);path.reset();path.moveTo(startPointX,startPointY);path.cubicTo(con1PointX,con1PointY,con2PointX,con2PointY,endPiontX,endPiontY);canvas.drawPath(path,paint);}
}
这篇关于三阶贝塞尔曲线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!