2013-11-20 71 views
0

我希望用戶能夠用手指垂直或水平(而不是對角線)滑動按鈕的長度。帶用戶滑動手勢的滑動按鈕

示例:按鈕長50dp,寬。用戶將向右滑動,按鈕將向右移動50dp。

現在我有下面的代碼,它根據用戶滑動的方式正確提示一個Toast。

GameScreen

public class GameScreen extends Activity { 

    Button btn1; 

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

     btn1 = (Button)findViewById(R.id.button1); 
     btn1.setText("BUTTON"); 
     btn1.setOnTouchListener(new OnSwipeTouchListener() { 
      public void onSwipeTop() { 
       Toast.makeText(GameScreen.this, "top", Toast.LENGTH_SHORT).show(); 
      } 
      public void onSwipeRight() { 
       Toast.makeText(GameScreen.this, "right", Toast.LENGTH_SHORT).show(); 
      } 
      public void onSwipeLeft() { 
       Toast.makeText(GameScreen.this, "left", Toast.LENGTH_SHORT).show(); 
      } 
      public void onSwipeBottom() { 
       Toast.makeText(GameScreen.this, "bottom", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
} 

OnSwipeTouchListener

public class OnSwipeTouchListener implements OnTouchListener { 

    Context context; 

    private final GestureDetector gestureDetector = new GestureDetector(context, new GestureListener()); 

    public boolean onTouch(final View view, final MotionEvent motionEvent) { 
     return gestureDetector.onTouchEvent(motionEvent); 
    } 

    private final class GestureListener extends SimpleOnGestureListener { 

     private static final int SWIPE_THRESHOLD = 100; 
     private static final int SWIPE_VELOCITY_THRESHOLD = 100; 

     @Override 
     public boolean onDown(MotionEvent e) { 
      return true; 
     } 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
      boolean result = false; 
      try { 
       float diffY = e2.getY() - e1.getY(); 
       float diffX = e2.getX() - e1.getX(); 
       if (Math.abs(diffX) > Math.abs(diffY)) { 
        if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { 
         if (diffX > 0) { 
          onSwipeRight(); 
         } else { 
          onSwipeLeft(); 
         } 
        } 
       } else { 
        if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { 
         if (diffY > 0) { 
          onSwipeBottom(); 
         } else { 
          onSwipeTop(); 
         } 
        } 
       } 
      } catch (Exception exception) { 
       exception.printStackTrace(); 
      } 
      return result; 
     } 
    } 

    public void onSwipeRight() { 
    } 

    public void onSwipeLeft() { 
    } 

    public void onSwipeTop() { 
    } 

    public void onSwipeBottom() { 
    } 
} 

我的問題是如何能得到鍵實際移動,而不是僅僅提示舉杯?

+0

嘗試翻譯按鈕。 btnView.animate()。translate()....... – Tejas

+1

將當前位置觸摸並設置在btn1.setTranslationX()和setTranslationY()中 – Uma

+0

@Rani - 謝謝! 'btn1.setTranslationX/Y()'就像我想要的那樣工作。 – Matt

回答

1

將當前位置觸摸並在btn1.setTranslationX()和setTranslationY()中設置。