1 回答

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();
}
}
}
添加回答
舉報