2011-04-22 23 views
5

Bir TextView nesnesi için bir onFling olayı algılamaya çalışıyorum. Aşağıdaki kod onDown olayı için mükemmel şekilde çalışır, ancak onScroll veya onFling olaylarını elde edemez. Herhangi bir işaretçi?onFling for TextView Çalışmıyor

Teşekkür

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; 
      } 
     }); 
    } 
} 

düzeni sadece LinearLayout içinde bir TextView'un olduğunu.

+0

bu emülatörde mi? –

cevap

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

Burada doğru olarak dönmelisiniz. Gördüğünüze göre false döndürerek aşağı döndürme olayını reddeder ve bundan dolayı herhangi bir sonraki olayı alamazsınız.

+0

Aslında ben daha fazla veya daha az diyorsunuz ne hangi aşağıdakileri çalıştı: 'kamu boolean onTouch (Görünüm v MotionEvent olay) \t \t \t { \t \t \t \t dönüş myGestDetector.onTouchEvent (olay); \t \t \t} 'Bu ne çağrılıyor? Bana bir referans gösterebilir misin? Çok teşekkürler! – Sandy

+0

http://developer.android.com/reference/android/view/View.OnTouchListener.html 'Dinleyici olayı tükettiyse True döndürür, aksi halde false.' –

+0

Artık hem onDown hem de onFling'in problemi var. Aynı "olay" için çağrıda bulundu (insan bakış açısından). OnDown'ın bir diziden rastgele bir metin ayarlamasını ve bir sonraki metni ayarlamak için atlatmayı istiyorum (bu kod yukarıdaki snippet'te bulunmuyor). Sadece onDown'ı veya sadece onFling'i nasıl alabilirim ??? – Sandy

0

Ama benim durumumda işe yarıyor. TextView iç sınıfında true olarak dönüyorum ancak TouchEvent öğesinden false döndürüyorum.

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; 
    }