0

ドラッグアンドドロップボタンを作成しようとしています。これらは同じxmlにあり、2つのonTouchListenerを作成しました。ドラッグアンドドロップできますが、一方を移動すると、もう一方も移動します。誰かに教えてください。これを解決するには?これが私のコードです:

    btn = (Button) findViewById(R.id.btn);
    btn.setDrawingCacheEnabled(true);
    btn.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View view, MotionEvent me) {
            if (me.getAction() == MotionEvent.ACTION_DOWN) {
                status = START_DRAGGING;
            }
            if (me.getAction() == MotionEvent.ACTION_UP) {
                status = STOP_DRAGGING;
                Log.i("Drag", "Stopped Dragging");
            } 
            else if (me.getAction() == MotionEvent.ACTION_MOVE) {
                if (status == START_DRAGGING) {
                    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                            LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
                    layoutParams.setMargins((int) me.getRawX() - 50,(int) me.getRawY() - 70, 0, 0);


                    layout.removeView(btn);
                    layout.addView(btn, layoutParams);
                    btn.invalidate();
                }
            }
            return false;
        }
    });

    btn1 = (Button) findViewById(R.id.btn1);
    btn1.setDrawingCacheEnabled(true);
    btn1.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View view1, MotionEvent me1) {
            if (me1.getAction() == MotionEvent.ACTION_DOWN) {
                status = START_DRAGGING;
            }
            if (me1.getAction() == MotionEvent.ACTION_UP) {
                status = STOP_DRAGGING;
                Log.i("Drag", "Stopped Dragging");
            } 
            else if (me1.getAction() == MotionEvent.ACTION_MOVE) {
                if (status == START_DRAGGING) {
                    LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(
                            LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
                    layoutParams1.setMargins((int) me1.getRawX() - 50,(int) me1.getRawY() - 70, 0, 0);


                    layout.removeView(btn1);
                    layout.addView(btn1, layoutParams1);
                    btn1.invalidate();
                }
            }
            return false;
        }
    }
    );
4

1 に答える 1

0

を使用しないでくださいLinearLayout

私はまたはRelativeLayoutおそらくを使用しますFrameLayout

また、http://developer.android.com/guide/topics/ui/declaring-layout.htmlも参照してください。

于 2013-01-07T21:55:47.983 に答える