2013-12-13 3 views
0

ImageView에 대해 선언 한 setOnTouchListener를 인터럽트하려고합니다. 요점은 청취자를 멈추고 그것에 "리셋"하고, 사용자의 손가락이 스크린의 상단에 가까이있을 때, 나의 ImaeView Layout에도 있습니다.이벤트 이동 중 SetOnTouchListener 인터럽트

내 단계는 다음과 같습니다 이 -> OnTouchListener 만들기 -> 스토어 손가락 위치 -> 손가락이 화면 (100pixels)의 상단에 가까운 경우, 활동 레이아웃 XML 파일에서 기본값으로 이미지 뷰의 레이아웃을 재설정 , Listener를 인터럽트합니다. -> OnTouchListener를 다시 사용하려면 사용자가 손가락을 올려야합니다.

내 코드는 같다 :

public void sendData(){ 
    readyDeck(); 
} 

손가락의 위치는 항상 : I 코드가 바로 이런 경우

private void readyDeck() { 
    // TODO Auto-generated method stub 
    backCard = (ImageView)findViewById(R.id.leader_backCardImg); 
    backCard.setVisibility(View.VISIBLE); 
    backCard.setAlpha(255); 
    backCard.setOnTouchListener(new OnTouchListener() { 


     @Override 
     public boolean onTouch(View v, MotionEvent me) { 


      int eid = me.getAction(); 
      switch(eid){ 
       case MotionEvent.ACTION_MOVE: 
        DisplayMetrics displaymetrics = new DisplayMetrics(); 
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
        int height = displaymetrics.heightPixels; 
        RelativeLayout.LayoutParams mParams = (RelativeLayout.LayoutParams) backCard.getLayoutParams(); 
        int y = (int) me.getRawY(); 
        mParams.topMargin = y-height+(backCard.getHeight()/(1+(1/2))); 
        backCard.setLayoutParams(mParams); 
        int limit = backCard.getHeight(); 

        if(y > limit){ 
         mParams.topMargin = limit; 
         backCard.setLayoutParams(mParams); 
        } 

        else if(y < 255){ 
         backCard.setAlpha(y); 
         if(y < 100){ 

          backCard.setVisibility(View.GONE); 
          backCard.setOnTouchListener(null); 
          sendData(); 
          break; 
         } 

        } 

        break; 
       default: 
        break; 
      } 
      return true; 
     } 
    }); 

} 

같이 sendData() 메소드는 리스너를 다시 가지고 있지만, 우리가 화면에서 꺼낸 경우에도 저장되고 사용됩니다.

는 여기에서 로그 캣 ArrayList에의 한 임의의 항목을 제거하고, 것처럼하여, 같이 sendData() 메소드에서 일부 작업을 추가 할 볼 수 있습니다 : 우리는 리스너를 중지하지 않는 방법을 볼 수 있습니다

12-13 08:01:06.400: I/System.out(17171): s4 removed.New Size : 51 
12-13 08:01:06.460: I/System.out(17171): h6 removed.New Size : 50 
12-13 08:01:06.520: I/System.out(17171): h1 removed.New Size : 49 
12-13 08:01:06.560: I/System.out(17171): c1 removed.New Size : 48 
12-13 08:01:06.605: I/System.out(17171): hk removed.New Size : 47 
12-13 08:01:06.630: I/System.out(17171): d9 removed.New Size : 46 
12-13 08:01:06.655: I/System.out(17171): d2 removed.New Size : 45 
12-13 08:01:06.695: I/System.out(17171): h2 removed.New Size : 44 
12-13 08:01:06.730: I/System.out(17171): d8 removed.New Size : 43 
12-13 08:01:06.760: I/System.out(17171): s10 removed.New Size : 42 
12-13 08:01:06.800: I/System.out(17171): h7 removed.New Size : 41 
12-13 08:01:06.830: I/System.out(17171): d6 removed.New Size : 40 
12-13 08:01:06.850: I/System.out(17171): h9 removed.New Size : 39 
12-13 08:01:06.900: I/System.out(17171): s6 removed.New Size : 38 
12-13 08:01:07.250: I/System.out(17171): c4 removed.New Size : 37 
12-13 08:01:07.275: I/System.out(17171): d3 removed.New Size : 36 
12-13 08:01:07.300: I/System.out(17171): cv removed.New Size : 35 

을 왜냐하면 데칼레이션이 끝난 직후 리스너는 boolen OnTouch()로 다시로드되기 때문입니다.

청취자를 방해하는 방법이 있습니까? 그리고 더 많은 것, 내 ImageView의 레이아웃을 재설정? 고맙습니다 !

+0

귀하의 질문에 혼란 스럽습니다. 다시 말로 표현할 수 있습니까? 단계별로 단계별로 원하는 것을 말하고 잘못 될 수 있습니까? –

+0

내 단계는 다음과 같습니다. -> OnTouchListener 만들기 -> 손가락 위치 저장 -> 손가락이 화면 상단 (100 픽셀) 근처에 있으면 작업 레이아웃 xml 파일에서 기본적으로 ImageView의 레이아웃을 재설정하고 인터럽트 그 듣는 사람. -> OnTouchListener를 다시 사용하려면 사용자가 손가락을 올려야합니다. 감사합니다. . – mickaelb91

답변

0

sendData()를 호출 할 때 false를 반환하면 현재 터치 이벤트에 대한 onTouch 메서드를 더 이상 호출 할 수 없게됩니다. developer website :

onTouch() - 청취자가이 이벤트를 사용하는지 여부를 나타내는 부울을 반환합니다. 중요한 것은이 이벤트가 서로 따라 오는 여러 작업을 가질 수 있다는 것입니다. 따라서 다운 액션 이벤트가 수신 될 때 false를 반환하면 해당 이벤트를 소비하지 않았고이 이벤트의 후속 액션에도 관심이 없다는 것을 나타냅니다. 따라서 손가락 제스쳐 또는 최우선 액션 이벤트와 같은 이벤트 내의 다른 모든 작업은 호출되지 않습니다.

+0

break 대신 sendData()를 호출 한 후 false를 반환하려고했습니다. 그러나 그것은 동일합니다. – mickaelb91

+0

코드를 잘못 읽었습니까? 무한 루프를 설정 한 것처럼 보입니다. onTouchListener에서 sendData()를 호출하면 readyDeck()을 호출하여 onTouchListener를 다시 연결합니다. 다음에 터치 이벤트가 발생하면 백 카드가 다시 터치합니다. 그리고 사실, onTouch의 맨 아래에 false를 반환 해보십시오. – GLee