2017-11-27 18 views
0

私が達成しようとしているのは、私がカスタムビューを持っているということです。ビューは画面上でドラッグ可能です。カスタムビューとタッチリスナーで

しかし、ビューをタップするだけで別のビューを表示するにはどうすればよいですか?

私が必要とするものをどのように達成するかについての私の最初の考えは、ビューが長くクリックされたかどうかを確認して移動でき、ビューを表示しない場合です。

これは私のコードです:任意の助けを事前に

collapsedLayout.setOnTouchListener(new View.OnTouchListener() { 
     private int initialX; 
     private int initialY; 
     private float initialTouchX; 
     private float initialTouchY; 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 

         initialX = params.x; 
         initialY = params.y; 
         initialTouchX = event.getRawX(); 
         initialTouchY = event.getRawY(); 

        return true; 

       case MotionEvent.ACTION_UP: 

        return true; 


       case MotionEvent.ACTION_MOVE: 
        params.x = initialX + (int) (event.getRawX() - initialTouchX); 
        params.y = initialY + (int) (event.getRawY() - initialTouchY); 
        mWindowManager.updateViewLayout(entireLayout, params); 
        return true; 
      } 
      return false; 
     } 
    }); 

ありがとう!

答えて

0
private static final int THRESHOLD_X = 120; 
private static final int THRESHOLD_Y = 120; 
private static final int NONE = 0; 
private static final int MOVE = 1; 
private static int mode = NONE; 

collapsedLayout.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      switch (motionEvent.getAction()){ 
       case MotionEvent.ACTION_DOWN: 
        // Action Down 
        break; 
       case MotionEvent.ACTION_MOVE: 
        if(view.getX() > THRESHOLD_X && view.getY()> THRESHOLD_Y){ 
         // performDrag 
         mode = MOVE; 
         performDrag(view); 
        } 
        break; 
       case MotionEvent.ACTION_UP: 
        // Action up 
        if(mode == MOVE){ 
         // Do nothing and return 
         return true; 
        } 
        // Perform click to the view 
        view.performClick(); 
        break; 
       default: 
        // Handle default case. 
        break; 
      } 
      return false; 
     } 
    }); 
関連する問題