SORU
1 HAZİRAN 2009, PAZARTESİ


Android - temel jest algılama

fling jest algılama Android uygulamam için çalışma yapmak istiyorum.

Ne var 9 ImageView s içeren GridLayout. Burada bulabilirsiniz kaynağı: Romain Guys's Grid Layout.

Bu dosya Photostream application Romain almak ve sadece biraz adapte olmuştur.

Basit bir tıklama durumu View.OnClickListener uygulayan activity ana olmam Ekle ImageView her onClickListener set lazım sadece. Sonsuz fling bir tanıdığı bir şey uygulamak daha karmaşık görünüyor. Bu views yayılma olabilir diye tahmin ediyorum?

  • Eğer benim etkinlik uygular OnGestureListener nasıl olduğunu bilmiyorum jest dinleyici olarak ayarla Grid ya Image görünümler ekleyin.

    public class SelectFilterActivity extends Activity implements
       View.OnClickListener, OnGestureListener { ...
    
  • Eğer benim etkinlik uygular OnTouchListener o zaman ben de hayır var onFling (override yöntem parametreleri bana izin olarak iki olay eğer fling olup olmadığını belirlemek için kayda değer).

    public class SelectFilterActivity extends Activity implements
        View.OnClickListener, OnTouchListener { ...
    
  • Eğer bir özel ImageView uzatır GestureImageView gibi View, yaparsam fling bir görünümden oluşan aktivite nasıl söyleyeceğimi bilmiyorum. Her durumda, bunu denedim ve yöntemleri ekrana dokunduğumda denilen değildi.

Bunu sadece somut bir örnek görünümler arasında çalışma gerekiyor. Ne, ne zaman ve nasıl listener bu eklemek gerekir? Tek tıklama da tespit etmek lazım.

// Gesture detection
mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        int dx = (int) (e2.getX() - e1.getX());
        // don't accept the fling if it's too short
        // as it may conflict with a button push
        if (Math.abs(dx) > MAJOR_MOVE && Math.abs(velocityX) > Math.absvelocityY)) {
            if (velocityX > 0) {
                moveRight();
            } else {
                moveLeft();
            }
            return true;
        } else {
            return false;
        }
    }
});

Benim ekranın üstünde şeffaf bir görünüm koymak mümkün kaçamakları yakalamak için mi?

Eğer 29 ** istemezsem XML, çocuk resim görüşlerim oluşturmak ImageView yeni bir alt sınıf için bir yapıcı parametre olarak GestureDetector geçebilir miyim?

Bu fling çalışmak için algılama almaya çalışıyorum bu çok basit bir aktivite: SelectFilterActivity (Adapted from photostream).

Bu kaynaklar bakıyordum:

Benim için hiçbir şey şimdiye kadar çalıştı ve bazı öneriler için umuyordum.

CEVAP
2 HAZİRAN 2009, Salı


Benim durum için adapte olan Code Shogun için teşekkürler.

Etkinlik her zamanki gibi OnClickListener uygulamak

public class SelectFilterActivity extends Activity implements OnClickListener
{

    private static final int SWIPE_MIN_DISTANCE = 120;
    private static final int SWIPE_MAX_OFF_PATH = 250;
    private static final int SWIPE_THRESHOLD_VELOCITY = 200;
    private GestureDetector gestureDetector;
    View.OnTouchListener gestureListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /* ... */

        // Gesture detection
        gestureDetector = new GestureDetector(this, new MyGestureDetector());
        gestureListener = new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                return gestureDetector.onTouchEvent(event);
            }
        };

    }

    class MyGestureDetector extends SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            try {
                if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                    return false;
                // right to left swipe
                if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    Toast.makeText(SelectFilterActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show();
                }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    Toast.makeText(SelectFilterActivity.this, "Right Swipe", Toast.LENGTH_SHORT).show();
                }
            } catch (Exception e) {
                // nothing
            }
            return false;
        }

            @Override
        public boolean onDown(MotionEvent e) {
              return true;
        }
    }
}

Ana sayfa düzeni eklemek tüm görünümler için jest dinleyiciniz takın;

// Do this for each view added to the grid
imageView.setOnClickListener(SelectFilterActivity.this); 
imageView.setOnTouchListener(gestureListener);

Sizin geçersiz gibi huşu içinde seyretmek yöntemleri, her iki özelliği(View v) etkinlik ve jest dinleyici onFling çarptı.

public void onClick(View v) {
        Filter f = (Filter) v.getTag();
        FilterFullscreenActivity.show(this, input, f);
}

The post 'kaçamak' dans isteğe bağlı ama önerilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • NLthomas21

    NLthomas21

    20 Mayıs 2008
  • TomSka

    TomSka

    30 Mayıs 2006
  • FusioNGamiing

    FusioNGamiin

    10 Temmuz 2007