Android:拖动多个视图

时间:2012-10-15 09:07:04

标签: android drag-and-drop

我在android中拖动多个视图时遇到问题。我有一个使用Canvas创建的两个圆圈。问题是我只能拖动一个圆圈而我无法拖动另一个圆圈。似乎第一个圆圈覆盖整个屏幕,当我尝试拖动第二个圆圈时,第一个圆圈仍在移动。

这是我的代码。

MainActivity.java

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}}

DragSource.java

public class DragSource extends View {

private Paint viewPaint;
private float startX;
private float startY;
private float touchOffsetX;
private float touchOffsetY;
private float x = 30;
private float y = 30;
private static final float RADIUS = 30;

//needed for finding drop target:

//the constructor:
public DragSource(Context context, AttributeSet attrs) {
    super(context, attrs);

    viewPaint = new Paint();
    viewPaint.setColor(Color.RED);
    viewPaint.setAntiAlias(true);
}

public boolean onTouchEvent(MotionEvent mEvent) {

    int eventAction = mEvent.getAction();
    switch(eventAction) 
    {
    case MotionEvent.ACTION_DOWN:
        startX = x;
        startY = y;
        touchOffsetX = mEvent.getX();
        touchOffsetY = mEvent.getY();
        break;
    case MotionEvent.ACTION_UP:

        break;
    case MotionEvent.ACTION_MOVE:   
    case MotionEvent.ACTION_CANCEL:
        x = startX + mEvent.getX() - touchOffsetX;
        y = startY + mEvent.getY() - touchOffsetY;
        break;
    }
    return true;
}

public void draw(Canvas c) {
    int w = c.getWidth();
    int h = c.getHeight();


    c.drawCircle(x, y, RADIUS, viewPaint);
    this.invalidate();
}}

my activity_main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" ><com.example.trialsdrag.DragSource
android:layout_width="wrap_content"
android:layout_height="wrap_content"/><com.example.trialsdrag.DragSource
android:layout_width="wrap_content"
android:layout_height="wrap_content"/></RelativeLayout>

1 个答案:

答案 0 :(得分:1)

正在发生的事情是你的观点的大小实际上是整个屏幕尺寸,在onTouchEvent中,你只需更改它们上的绘图(移动圆圈)。

您需要做的是为android:layout_height中的DragSource设置android:layout_widthmain_activity.xml,然后使用以下内容在onTouchEvent中动态更改布局边距。

RelativeLayout.LayoutParams params = (LayoutParams) getLayoutParams();
params.setMargins(x+params.leftMargin, y+params.topMargin, 0, 0);
setLayoutParams(params);