2016-08-12 6 views
1

私はフローティングアクションボタンを使用しています。ユーザーがファブに触れてドラッグしたときのファブの位置を変更したい。私はonTouchListenerを使用していますが、fabをうまく動かすことはありません。 ここに私のコードです:事前に任意の提案からonTouchListenerでfabの位置を変更するにはどうすればいいですか?

final FloatingActionButton fabButton = new FloatingActionButton.Builder(this) 
    .withDrawable(getResources().getDrawable(R.drawable.fab)) 
    .withButtonColor(Color.WHITE) 
    .withGravity(Gravity.BOTTOM | Gravity.RIGHT) 
    .withMargins(0, 0, 16, 16) 
    .create(); 
    fabButton.setAlpha(0.6f); 
    fabButton.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      fabButton.setX(event.getX()); 
      fabButton.setY(event.getY()); 

      return false; 
     } 
    }); 

おかげで...

答えて

1

問題がreturn falseでした。リスナーがfinger downイベントでfalseを返した場合、moveイベントは単純な言葉で無視されます。このコードを試してみてください。また、

fabButton.setOnTouchListener(new View.OnTouchListener() { 

     float x, y; 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()){ 

       case MotionEvent.ACTION_MOVE: 

        fabButton.setX(fabButton.getX() + (event.getX() - x)); 
        fabButton.setY(fabButton.getY() + (event.getY() - y)); 
        return true; 
       case MotionEvent.ACTION_DOWN: 
        x = event.getX(); 
        y = event.getY(); 
        return true; 
      } 

      return false; 
     } 
    }); 

xyは、ビューの左上隅の座標であるとして、あなたはおそらく、これらの座標のようなタッチのxyを設定する必要はありません。代わりに、上記のスニペットで指定したように、移動のデルタを計算してfabの初期座標を増やす必要があります

+0

ありがとうございます。 –

関連する問題