亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

記錄并存儲曲線形狀的路徑

記錄并存儲曲線形狀的路徑

白衣非少年 2023-04-13 15:39:47
我想在我的繪圖應用程序中記錄用戶的輸入。它可以畫出任何他想要的東西,而不僅僅是直線形狀。我怎樣才能在一條路徑上記錄用戶在繪制時所做的所有動作,例如,一個特定的圓圈?這是我的方法,其中有System.out.println()是我將推送方法以保存路徑的地方。    public boolean onTouchEvent(MotionEvent event) {        float touchX = event.getX();        float touchY = event.getY();        //respond to down, move and up events        switch (event.getAction()) {            case MotionEvent.ACTION_DOWN:                drawPath.moveTo(touchX, touchY);                break;            case MotionEvent.ACTION_MOVE:                drawPath.lineTo(touchX, touchY);                break;            case MotionEvent.ACTION_UP:                drawPath.lineTo(touchX, touchY);                System.out.println(touchX +", " +touchY);                drawCanvas.drawPath(drawPath, drawPaint);                drawPath.reset();                break;            default:                return false;        }        //redraw        invalidate();        return true;    }```
查看完整描述

1 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

只需存儲 (x,y) 點并在必要時稍后“重繪”它們。


對于 (x,y),我指的是event getX&getY值。將所有值存儲在 中ArrayList,然后您可以使用存儲的值重繪形狀?;旧?,我建議你按照以下幾行做一些事情,


創建一個點數組


ArrayList<Pair<Float,Float>> points = new ArrayList<>();

將觸摸點存儲在數組中


public boolean onTouchEvent(MotionEvent event) {

    float touchX = event.getX();

    float touchY = event.getY();

    //respond to down, move and up events

    switch (event.getAction()) {

        case MotionEvent.ACTION_DOWN:

            drawPath.moveTo(touchX, touchY);

            points.add(new Pair<Float, Float>(touchX, touchY));

            break;

        case MotionEvent.ACTION_MOVE:

            drawPath.lineTo(touchX, touchY);

            points.add(new Pair<Float, Float>(touchX, touchY));

            break;

        case MotionEvent.ACTION_UP:

            drawPath.lineTo(touchX, touchY);

            System.out.println(touchX +", " +touchY);


            points.add(new Pair<Float, Float>(touchX, touchY));

            //At this point you might want to

            //store this array somewhere 

            //so you can use it to redraw later if needed


            drawCanvas.drawPath(drawPath, drawPaint);

            drawPath.reset();

            break;

        default:

            return false;

    }

    //redraw

    invalidate();

    return true;

}

您可以在需要時使用數組重繪形狀


public void drawFromArrayList(ArrayList<Pair<Float,Float>> points) {

    int pointCount = points.size();

    if (pointCount < 2) {

        return;

    }

    for (int i=0;i<pointCount;i++) {

        float touchX = points.get(i).first, touchY = points.get(i).second;

        if(i==0) {

            drawPath.moveTo(touchX, touchY);

        }

        drawPath.lineTo(touchX, touchY);

        if(i==pointCount-1) {

            drawCanvas.drawPath(drawPath, drawPaint);

            drawPath.reset();

        }

    }

}


查看完整回答
反對 回復 2023-04-13
  • 1 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號