1

入れ子になった を 2 つ作成RelativeLayoutし、1 つをいくつかTextViewの で埋め、指をドラッグするジェスチャーで反応させました。

しかし、うまくいきません:

1) グループを移動すると、背景が再描画されないかのようにゴミの跡が残る

2) ==800 の列leftMarginは描画されません

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>

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;
            }

        }
    });
}
}

私の目標を正しく(簡単に)実装する方法は?

4

0 に答える 0