Coordinates の ArrayList を描画するカスタム ビューがあります (これは、x と y の位置だけを含むカスタム クラスです)。ArrayList に Coordinates が追加されるにつれて、描画が著しく遅くなります。この ArrayList を描画するためのより効率的な方法があるかどうか、または追加された 1 つの座標を追加するだけでよいかどうか疑問に思っていました (ArrayList は、無効化への呼び出し間で 1 つの座標のみを変更するため)。
関連するコードは次のとおりです。
public class CustomDraw extends View {
// member variables
public void updateLine() {
// grab new coordinates for each measure
if(measure1.isEmpty()) {
measure1.add(new Coordinate(0, 0));
} else {
Coordinate last_coord = measure1.get(measure1.size() - 1);
// calculations for south, north, east, and west
if(south && east) {
measure1.add(new Coordinate(last_coord.x + 3, last_coord.y + 3));
} else if(south && west) {
measure1.add(new Coordinate(last_coord.x - 3, last_coord.y + 3));
} else if(north && east) {
measure1.add(new Coordinate(last_coord.x + 3, last_coord.y - 3));
} else if(north && west) {
measure1.add(new Coordinate(last_coord.x - 3, last_coord.y - 3));
}
}
if(draw) {
dh.sleep(10);
}
}
@Override
public void onDraw(Canvas c) {
super.onDraw(c);
Paint p = new Paint();
p.setStyle(Paint.Style.FILL);
p.setColor(Color.WHITE);
c.drawPaint(p);
p.setColor(Color.BLACK);
switch(mSelected) {
case Constants.MEASURE_1:
for(int i = 0; i < measure1.size(); i++) {
Coordinate coord = measure1.get(i);
Log.d("MAAV", "drawing coord.x, coord.y: " + (coord.x) + ", " + (coord.y));
c.drawRect(coord.x, coord.y, coord.x + 3, coord.y + 3, p);
}
break;
}
}
class DrawHandler extends Handler {
@Override
public void handleMessage(Message msg) {
CustomDraw.this.updateLine();
CustomDraw.this.invalidate();
}
public void sleep(long delayMillis) {
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
}
}
助けてくれてありがとう!