Обнаружение жестов на макете сетки

Фактически thread.start() создает новый поток и имеет свой собственный сценарий выполнения.

, но thread.run() не создает никакого нового потока, вместо этого он выполняет метод запуска в текущем потоке.

Итак, ребята, если вы используете thread.run(), тогда подумайте, что использование многопоточности, если вы хотите, чтобы только один поток выполнял весь метод run.

1067
задан Trilarion 28 December 2015 в 08:49
поделиться

1 ответ

Спасибо Code Shogun , чей код я адаптировал к моей ситуации.

Пусть ваша деятельность реализует OnClickListener как обычно:

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

Прикрепите прослушиватель жестов ко всем представлениям, которые вы добавляете в основной макет;

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

Наблюдайте с трепетом, когда срабатывают ваши переопределенные методы, как onClick (View v) действия, так и ] onFling слушателя жеста.

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

Танец сообщения "бросок" не обязателен, но приветствуется.

как onClick (View v) действия, так и onFling слушателя жестов.

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

Танец после «бросок» не является обязательным, но приветствуется.

как onClick (View v) действия, так и onFling слушателя жестов.

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

Танец после «бросок» не является обязательным, но приветствуется.

810
ответ дан 19 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: