Фактически thread.start()
создает новый поток и имеет свой собственный сценарий выполнения.
, но thread.run()
не создает никакого нового потока, вместо этого он выполняет метод запуска в текущем потоке.
Итак, ребята, если вы используете thread.run()
, тогда подумайте, что использование многопоточности, если вы хотите, чтобы только один поток выполнял весь метод run.
Спасибо 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);
}
Танец после «бросок» не является обязательным, но приветствуется.