¿Por qué mover GroupView funciona mal?

Hice dos anidados RelativeLayouts, llenó uno con algunos TextViews e hizo una reacción al arrastrar el dedo.

Pero funciona mal:

1) el grupo en movimiento deja rastros de basura como si el fondo no se volviera a dibujar

2) la columna con leftMargin==800 no dibuja

El código de diseño XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/stator"
>

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="0dp"
    android:layout_marginTop="0dp"
    android:id="@+id/mover"
    android:background="@android:color/darker_gray"
    >

</RelativeLayout>

</RelativeLayout>

El código java:

 public class SymbolPadActivity extends Activity {

private RelativeLayout mover;
private RelativeLayout stator;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    mover = (RelativeLayout) findViewById(R.id.mover);

    RelativeLayout.LayoutParams labelParams;
    TextView textView;
    for(int leftMargin = 0; leftMargin<1500; leftMargin += 200) {
        for(int topMargin=0; topMargin<800; topMargin += 80) {

            // I can't omit these 3 lines 
            labelParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            labelParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
            labelParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);

            labelParams.leftMargin = leftMargin;
            labelParams.topMargin = topMargin;

            textView = new TextView(this);
            textView.setText("(" + leftMargin + "," + topMargin + ")");
            mover.addView(textView, labelParams);

        }
    }

    stator = (RelativeLayout) findViewById(R.id.stator);


    stator.setOnTouchListener(new View.OnTouchListener() {

        private int startleft, starttop;
        private float startx, starty;
        private boolean started;

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if( event.getActionMasked() == MotionEvent.ACTION_DOWN ) {
                started = true;
                startx = event.getX();
                starty = event.getY();
                startleft = mover.getLeft();
                starttop = mover.getTop();
                return true;
            }

            else if( event.getActionMasked() == MotionEvent.ACTION_UP ) {
                started = false;
                startx = starty = 0;
                return true;
            }

            else if( event.getActionMasked() == MotionEvent.ACTION_MOVE ) {
                mover.setLeft(  startleft + (int)(event.getX() - startx) );
                mover.setTop(  starttop + (int)(event.getY() - starty) );
                return true;
            }

            else {
                return false;
            }

        }
    });
}
}

¿Cómo implementar mi objetivo correctamente (en resumen)?

preguntado el 03 de mayo de 12 a las 18:05

necesita invalidar sus puntos de vista si cambia la posición. -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.