我有一个课程,每次触摸屏幕时都会创建圆圈,当它符合某些条件时我想从列表中删除它们。我怎样才能做到这一点?感谢。
游戏课程:
public class Juego extends SurfaceView implements View.OnTouchListener {
Circulos circulos;
Paint paint;
int x, y, radio;
List<Circulos> lista_circulos = new ArrayList<Circulos>();
public Juego(Context context, AttributeSet attrs) {
super(context, attrs);
this.setOnTouchListener(this);
setFocusable(true);
circulos = new Circulos(this);
paint = new Paint();
}
public void onDraw(Canvas canvas){
paint.setColor(Color.WHITE);
canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), paint);
for (Circulos circulos : lista_circulos) {
circulos.onDraw(canvas);
}
radio = circulos.radio_inicial;
invalidate();
}
private Circulos crearCirculos() {
return new Circulos(this);
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
x = (int) motionEvent.getX();
y = (int) motionEvent.getY();
crearCirculo();
invalidate();
return false;
}
public void crearCirculo(){
lista_circulos.add(crearCirculos());
}
public void borrar(){
lista_circulos.remove(0);
}
}
圈子类:
public class Circulos {
Juego juego;
Paint paint;
int radio_inicial, aumento_de_radio, x, y;
boolean una_vez = true;
boolean muere = false;
public Circulos(Juego juego) {
this.juego = juego;
paint = new Paint();
}
public void onDraw(Canvas canvas) {
if (una_vez == true) {
Random random = new Random();
radio_inicial = random.nextInt(20);
aumento_de_radio = random.nextInt(10) + 10;
x = juego.x;
y = juego.y;
una_vez = false;
}
canvas.drawCircle(x, y, radio_inicial, paint);
radio_inicial = radio_inicial + aumento_de_radio;
if (radio_inicial > canvas.getWidth() && radio_inicial > canvas.getHeight()) {
juego.borrar();
}
}
}
我试图用“lista_circulos.remove(0);”消除圆圈。但如果我创造了很多圈子就会崩溃。
logcat的:
03-05 17:10:15.719 5889-5889/com.example.agusv.arteconcirculos E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.agusv.arteconcirculos, PID: 5889
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.next(ArrayList.java:831)
at com.example.agusv.arteconcirculos.Juego.onDraw(Juego.java:42)
at android.view.View.draw(View.java:17071)
at android.view.SurfaceView.draw(SurfaceView.java:353)
at android.view.View.updateDisplayListIfDirty(View.java:16053)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3748)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3728)
at android.view.View.updateDisplayListIfDirty(View.java:16016)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3748)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3728)
at android.view.View.updateDisplayListIfDirty(View.java:16016)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3748)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3728)
at android.view.View.updateDisplayListIfDirty(View.java:16016)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3748)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3728)
at android.view.View.updateDisplayListIfDirty(View.java:16016)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3748)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3728)
at android.view.View.updateDisplayListIfDirty(View.java:16016)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3748)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3728)
at android.view.View.updateDisplayListIfDirty(View.java:16016)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:656)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:662)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:770)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2796)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2604)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2211)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1246)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6301)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871)
at android.view.Choreographer.doCallbacks(Choreographer.java:683)
at android.view.Choreographer.doFrame(Choreographer.java:619)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)