2016-03-18 16 views
0

私はこのコードを使ってボタンを移動しています。動きが起きていますが、移動を開始するとボタンが少し下に滑っています。 タッチしたときにボタンの色も変更します。タッチの動きイベントがアンドロイドで正しく機能していません

public boolean onTouch(View view, MotionEvent event) { 
     float currX,currY; 
     int action = event.getAction(); 

     Button gvup = (Button)findViewById(R.id.giveup); 
     gvup.setBackground(getResources().getDrawable(R.drawable.btn)); 

     switch (action) { 
      case MotionEvent.ACTION_DOWN: { 
       startClickTime = Calendar.getInstance().getTimeInMillis(); 
       mPrevX = event.getX(); 
       mPrevY = event.getY(); 
       gvup.setBackground(getResources().getDrawable(R.drawable.btn1)); 
       break; 
      } 
      case MotionEvent.ACTION_MOVE: 
      { 
       currX = event.getRawX(); 
       currY = event.getRawY(); 
       ViewGroup.MarginLayoutParams marginParams = new ViewGroup.MarginLayoutParams(view.getLayoutParams()); 
       marginParams.setMargins((int)(currX - mPrevX), (int)(currY - mPrevY),0, 0); 
       RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams); 
       view.setLayoutParams(layoutParams); 
       gvup.setBackground(getResources().getDrawable(R.drawable.btn1)); 
       break; 
      } 
      case MotionEvent.ACTION_CANCEL: 
       gvup.setBackground(getResources().getDrawable(R.drawable.btn1)); 
       break; 
      case MotionEvent.ACTION_UP: 
       long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime; 
       if(clickDuration < MAX_CLICK_DURATION) { 
        //click event has occurred 
        gvup.setBackground(getResources().getDrawable(R.drawable.btn)); 
        giveUp(); 
       } 
       break; 
     } 
     return true; 
    } 
} 

コードは完全に動作するはずですが動作しません。

mPrevY = event.getY(); 

の代わりに、私は

mPrevY = event.getY() + 65; 

は動きの位置は、多くのモバイルすべてではないともいないタブのために正常に動作して入力した場合。

ありがとうございました。

答えて

0

あなたのACTION_DOWNでもevent.getY() , event.getX()の代わりにevent.getRawY() , event.getRawX()を使用してみてください。

+0

これは陽気になっていました....:P –

+0

私はそれを動かすと今すぐ上隅に飛び降りています –

+0

どういう意味ですか?とにかく、ボタンを動かすだけなら、余白を変えるべきではありません。 'view.setX((int)(currX - mPrevX)'と 'view.setY((int)(currY - mPrevY)'を使用してください) – Wukash

関連する問題