Hi guys can plz help me in this case i want to drag a button called view , i set up the code like u see down there , but i still can't drag it , can u give me diffident solutions plz with a good explication
public class MainActivity extends Activity {
private Timer _timer = new Timer();
private LinearLayout linear1;
private Button view;
private Button btn2;
private Button widgets;
private TextView textview1;
private TimerTask mm;
@Override
protected void onCreate(Bundle _savedInstanceState) {
super.onCreate(_savedInstanceState);
setContentView(R.layout.main);
initialize();
initializeLogic();
}
private void initialize() {
linear1 = (LinearLayout) findViewById(R.id.linear1);
view = (Button) findViewById(R.id.view);
btn2 = (Button) findViewById(R.id.btn2);
widgets = (Button) findViewById(R.id.widgets);
textview1 = (TextView) findViewById(R.id.textview1);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
view.setOnDragListener( new View.OnDragListener() {
PointF DownPT = new PointF();
PointF StartPT = new PointF();
@Override public boolean onDrag(View v, android.view.DragEvent event) {
int dragEvent = event.getAction();
switch (dragEvent) {
case android.view.DragEvent.ACTION_DRAG_STARTED :
DownPT.x = event.getX();
DownPT.y = event.getY();
StartPT = new PointF( view.getX(), view.getY() ); break;
case android.view.DragEvent.ACTION_DRAG_LOCATION :
PointF mv = new PointF( event.getX() - DownPT.x, event.getY() - DownPT.y);
view.setX((int)(StartPT.x+mv.x)); view.setY((int)(StartPT.y+mv.y));
StartPT = new PointF( view.getX(), view.getY() ); break;
case android.view.DragEvent.ACTION_DRAG_ENTERED :
case android.view.DragEvent.ACTION_DRAG_EXITED :
break;
case android.view.DragEvent.ACTION_DROP : break;
default : break;
}
return true;
}
});
i need a good explication guys , cause i need to understand the problem , thank u for taking time to help me ! and i need to know whats the different solution to fix this problem guys
Implement this outside the onClick method :-
view.setOnDragListener( new View.OnDragListener() {
PointF DownPT = new PointF();
PointF StartPT = new PointF();
@Override public boolean onDrag(View v, android.view.DragEvent event) {
int dragEvent = event.getAction();
switch (dragEvent) {
case android.view.DragEvent.ACTION_DRAG_STARTED :
DownPT.x = event.getX();
DownPT.y = event.getY();
StartPT = new PointF( view.getX(), view.getY() ); break;
case android.view.DragEvent.ACTION_DRAG_LOCATION :
PointF mv = new PointF( event.getX() - DownPT.x, event.getY() - DownPT.y);
view.setX((int)(StartPT.x+mv.x)); view.setY((int)(StartPT.y+mv.y));
StartPT = new PointF( view.getX(), view.getY() ); break;
case android.view.DragEvent.ACTION_DRAG_ENTERED :
case android.view.DragEvent.ACTION_DRAG_EXITED :
break;
case android.view.DragEvent.ACTION_DROP : break;
default : break;
}
return true;
}
});
Not inside the onClick(). Hope this helps.