2012-10-15 3 views
1

J'ai un problème sur glisser plusieurs vues dans android. J'ai un deux cercle créé en utilisant un canevas. Le problème est que je peux seulement faire glisser un cercle et je ne peux pas faire glisser l'autre cercle. Il semble que le premier Cercle couvre tout l'écran, et quand j'essaie de faire glisser le 2ème Cercle, le 1er Cercle bouge.Android: faire glisser plusieurs vues

Voici mon code.

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

mon 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> 

Répondre

1

Ce qui se passe est la taille de votre point de vue est en fait la taille entière de l'écran, et en onTouchEvent, vous changez simplement le dessin sur eux (en déplaçant le cercle).

Ce que vous devez faire est de définir android:layout_height et android:layout_width pour le DragSource dans votre main_activity.xml, puis modifier les marges de mise en page dynamique en onTouchEvent utilisant:

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

que dois-je mettre dans l'androïde: layout_height et Android: layout_width ?? – jeponkz