2016-08-28 2 views
0

"대상"뷰까지의 거리를 지속적으로 모니터링하고 드래그 가능한 뷰를 대상 뷰 위로 드래그 할 때를 감지 할 수있게하면서 드래그 가능한 뷰를 원합니다. 내 생각은 두보기의 Rect's을 얻고 intersect()을 사용하여 그들이 만지고 있는지 확인하는 것이 었습니다. 그러나 내 구현은 원활하게 작동하지 않습니다 - 때로는 잘못된 위치에서 겹침을 감지하거나 겹침의 끝을 감지하지 못합니다. 내가 뭘 잘못하고 있는지, 아니면 올바른 방법으로 인도 할 수 있는지 말해 줄 수 있습니까? (왜냐하면 그것은 드래그하는 동안 이벤트를 모니터 할 수 없으므로 startDrag()을 사용할 수 없습니다.) onCreate에서다른 뷰 위로 드래그 한 뷰의 탐지를 구현하는 방법은 무엇입니까?

코드 :

//find UI 
myTextView = (TextView) findViewById(R.id.textView); 
myImageView = (ImageView) findViewById(R.id.imageView); 

//assign touch listener 
myTextView.setOnTouchListener(new MyTouchListener()); 

코드 MyTouchListener에 대한 : 터치 이벤트에 대해 부드럽게 텍스트 뷰를 이동해야하기 때문에

class MyTouchListener implements View.OnTouchListener { 

     //last coordinates 
     float lastX; 
     float lastY; 

     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 

      switch (motionEvent.getAction()) { 
       case MotionEvent.ACTION_DOWN: { 
        view.bringToFront(); 
        lastX = motionEvent.getRawX(); 
        lastY = motionEvent.getRawY(); 
       } 

       case MotionEvent.ACTION_MOVE: { 

        //motion difference 
        float deltaX = motionEvent.getRawX() - lastX; 
        float deltaY = motionEvent.getRawY() - lastY; 

        //set new last coordinates 
        lastX = motionEvent.getRawX(); 
        lastY = motionEvent.getRawY(); 

        //animate view to new location 
        view.animate().translationXBy(deltaX).translationYBy(deltaY).setDuration(0).start(); 

        //get Rects 
        Rect textViewRect = new Rect((int)lastX+myTextView.getLeft(), (int)lastY+myTextView.getTop(), (int)lastX+myTextView.getRight(), (int)lastY+myTextView.getBottom()); 
        Rect imageViewRect = new Rect(myImageView.getLeft(), myImageView.getTop(), myImageView.getRight(), myImageView.getBottom()); 


        if (imageViewRect.intersect(textViewRect)) { 
         myImageView.setImageDrawable(getResources().getDrawable(android.R.drawable.ic_dialog_info)); 
        } else { 
         myImageView.setImageDrawable(getResources().getDrawable(android.R.drawable.ic_delete)); 
        } 
       } 
      } 

      return true; 
     } 
    } 
+0

textViewRect에는 lastX 및 lastY 오프셋을 사용하지만 imageViewRect에는 사용하지 않는 이유는 무엇입니까? 그들을 제거하려고 했습니까? –

답변

0

애니메이션 된 번역이 필요하지 않습니다. 다음과 같이 TextView에 새로운 X, Y 좌표를 지정하십시오.

view.setX(view.getX() + deltaX); 
view.setY(view.getY() + deltaY); 
+0

당신은 'animate()'대체에 대해 옳았습니다. X, Y를 설정하여 드래그 할 수는 있지만 여전히 다른 뷰 위로 드래그 한 뷰를 감지하는 것과 관련된 동작은 변경되지 않습니다. – wilkas

+0

좌표에 문제가 있음을 이해합니다. 내가 GetRawY를 가져올 때 드래그 된 뷰의 Rect를 설정할 때 Activity Bar와 Status Bar 높이를 고려할 필요가 있음을 알았지 만 Rects가 정확하게 교차하도록하지는 못합니다 :(. – wilkas

+0

터치 이벤트를 받고있는 뷰는 어느 것입니까? –

관련 문제