2011-04-22 2 views
5

TextView 객체에 대한 onFling 이벤트를 감지하려고합니다. 아래 코드는 onDown 이벤트에 완벽하게 작동하지만 onScroll 또는 onFling 이벤트를 가져 오지 못합니다. 어떤 포인터?TextView에 대한 onFling이 작동하지 않습니다.

감사

package rob.testapp; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.GestureDetector; 
import android.view.GestureDetector.SimpleOnGestureListener; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.TextView; 

public class MainActivity extends Activity 
{ 
    private GestureDetector myGestDetector; 
    private TextView mainTextView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     myGestDetector = new GestureDetector(this, new SimpleOnGestureListener() 
     { 
      @Override 
      public boolean onScroll(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
      { 
       mainTextView.setText("just scroll'n"); 
       return false; 
      } 

      @Override 
      public boolean onDown(MotionEvent e1) 
      { 
       mainTextView.setText("on down"); 
       return false; 
      } 

      @Override 
      public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
      { 
       mainTextView.setText("on fling"); 
       return false; 
      } 
     }); 

     mainTextView = (TextView)findViewById(R.id.MainText); 
     mainTextView.setText("Starting app..."); 
     mainTextView.setOnTouchListener(new View.OnTouchListener() 
     { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) 
      { 
       myGestDetector.onTouchEvent(event); 
       return false; 
      } 
     }); 
    } 
} 

레이아웃 그냥있는 LinearLayout 안에 텍스트 뷰입니다.

+0

에뮬레이터에는 무엇입니까? –

답변

3
public boolean onTouch(View v, MotionEvent event) 
    { 
     myGestDetector.onTouchEvent(event); 
     return false; 
    } 

여기 사실을 반환해야한다고 생각합니다. false를 반환하여 rejects pointer down 이벤트를보고 이에 따른 후속 이벤트를받지 못합니다.

+0

사실 난 그냥 더 많거나 적은 당신은 말을하는지 무엇하는, 다음을 시도 :'공공 부울 onTouch (보기 V, MotionEvent 이벤트) \t \t \t { \t \t \t \t 반환 myGestDetector.onTouchEvent (이벤트); \t \t \t} '무엇이라고할까요? 참조 할 수있게 해주시겠습니까? 고마워! – Sandy

+0

http://developer.android.com/reference/android/view/View.OnTouchListener.html'청취자가 이벤트를 소비하면 True를 반환하고 그렇지 않으면 false를 반환합니다. ' –

+0

이제 onDown과 onFling이 둘 다 발생한다는 문제가 있습니다. 같은 "사건"(인간의 관점에서)을 요구했다. onDown이 배열에서 임의의 텍스트를 설정하고 fling이 다음 텍스트를 설정하기를 원합니다 (이 코드는 위의 스 니펫에 없습니다). 어떻게하면 onDown 또는 onFling을 얻을 수 있습니까 ??? – Sandy

0

하지만 제 경우에는 작동합니다. textView의 innerclass에서 true를 반환하지만 TouchEvent에서 false를 반환합니다.

public class FingureGesture extends Activity implements OnGestureListener,OnDoubleTapListener{ 
    GestureDetector detector; 
    File sdcard = Environment.getExternalStorageDirectory(); 
    TextView textView; 


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

     detector = new GestureDetector(this,this); 
     textView = (TextView) findViewById(R.id.editText1); 
     textView.setOnTouchListener(new OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       Log.i("OnTouch", "Im here "); 
        detector.onTouchEvent(event); 
       return false; 
      } 
     });  
    }//end of onCreate 

    public boolean onDown(MotionEvent e) { 
     Log.i("onDown ", "x:: "+e.getX()+"\ny:: "+e.getY()); 
     return false; 
    } 

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 
     return false; 
    } 


    public boolean onTouchEvent(MotionEvent me){ 

     Log.i(" onTouchEvent", me.toString()); 
     this.detector.onTouchEvent(me); 
//  return super.onTouchEvent(me); 
     return true; 
    } 
    public void onLongPress(MotionEvent e) { 
     Log.i(" onLongPress", e.toString()); 

    } 

    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 
      float distanceY) { 
     Log.i("On Scroll ","\n#e1 :: "+ e1.getX()+"\n#Histo e1.x"+"\n#e2 :: "+e2.getX()); 
     return false; 
    } 

    public void onShowPress(MotionEvent e) { 
     Log.i(" onShowPress", e.toString()); 

    } 

    public boolean onSingleTapUp(MotionEvent e) { 
     Log.i("onSingleTapUp ", e.toString()); 
     return false; 
    } 

    public boolean onDoubleTap(MotionEvent e) { 
     Log.i(" onDoubleTap", e.toString()); 
     return false; 
    } 

    public boolean onDoubleTapEvent(MotionEvent e) { 
     Log.i(" onDoubleTapEvent", e.toString()); 
     return false; 
    } 

    public boolean onSingleTapConfirmed(MotionEvent e) { 
     Log.i(" onSingleTapConfirmed", e.toString()); 
     return false; 
    }