2013-12-16 3 views
1

Я нашел новичками учебник здесь: http://androidrox.wordpress.com/2011/05/13/android-sample-app-drag-and-drop-image-using-touch/Android - как просто перетащить кнопку?

здесь код XML в моем случае:

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/absLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

    <Button 
     android:id="@+id/myButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Countries" /> 

</AbsoluteLayout> 

MainActivity.java:

public class MainActivity extends Activity { 

AbsoluteLayout absLayout; 
Button myButton = null; 
boolean touched = false; 

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

    absLayout = (AbsoluteLayout) findViewById(R.id.absLayout); 
    myButton = (Button) findViewById(R.id.myButton); 

    myButton.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      touched = true; 
      return false; 
     } 
    }); 

    absLayout.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if(touched == true) // any event from down and move 
      { 
       LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,(int)event.getX()-button_Countries.getWidth()/2,(int)event.getY()-myButton.getHeight()/2); 
       myButton.setLayoutParams(lp); 
      } 
      if(event.getAction()==MotionEvent.ACTION_UP){ 
       touched = false; 
      } 
      return true; 
     } 
    }); 
} 

В основном то, что происходит здесь, мне нужно touch myButton один раз для преобразования логического коснулся на true. Тогда я мог бы перетащить myButton, начав касаться в любом месте absLayout. Как я могу просто перетащить кнопку без необходимости касания кнопки?

Я попробовал установить LayoutParams на прослушиватель touch-touch myButton. Это вызывает мерцание при перетаскивании.

Также AbsoluteLayout всегда помечен как устаревший. Что означает «устаревший»? Означает ли это устаревшее и, следовательно, непригодное для использования? Или можно использовать, но может быть лучшее решение?

+0

Проверьте подобный вопрос и мой ответ [здесь] [1] [1]: http://stackoverflow.com/questions/20606802/how-to-swipe-a-button-ontouch -event-in-android/20607696 # 20607696 – GrIsHu

ответ

0
myButton.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     touched = true; 
     return false; 
    } 
}); 

Приведенная выше часть несет ответственность за касание, которое позволяет перетаскивать вашу кнопку. Теперь удалите эту часть кода и измените декларацию на boolean touched = true;

Теперь вы можете протащить, не касаясь кнопки в первую очередь.

+0

Это хорошая идея, чтобы предотвратить нажатие кнопки в первую очередь, но тогда мне все равно нужно нажимать на любую точку на абспуске и не на кнопку. –

+0

Можете ли вы рассказать, почему вы используете абсолютный макет. Вы можете использовать линейный или относительный макет, который работает намного лучше, чем абсолютный макет (его устарело, больше не используйте). – Yogamurthy

Смежные вопросы