Android自定義view貝塞爾曲線

本文實例為大傢分享瞭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;
    }
}

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: