我想得到fling
手势检测在我的 Android 应用程序中工作。
我拥有的是 GridLayout
包含 9 ImageView
s。来源可以在这里找到:Romain Guys's Grid Layout .
我拿的那个文件来自 Romain Guy 的 Photostream application并且只是稍作改编。
对于简单的点击情况,我只需要设置 onClickListener
对于每个 ImageView
我加为主要activity
实现View.OnClickListener
.实现识别 fling
的东西似乎要复杂得多。 .我想这是因为它可能跨越 views
?
OnGestureListener
我不知道怎么做Grid
或 Image
我的观点public class SelectFilterActivity extends Activity implements
View.OnClickListener, OnGestureListener { ...
OnTouchListener
那么我没有onFling
方法 override
(它有public class SelectFilterActivity extends Activity implements
View.OnClickListener, OnTouchListener { ...
View
,如 GestureImageView
扩展 ImageView
我不知道如何告诉 Activity fling
从 View 中已经发生。无论如何,我尝试了这个,当我触摸屏幕时没有调用这些方法。 listener
?我还需要能够检测到单击。// 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;
}
}
});
inflate
我的子 ImageView 来自 XML 我可以通过 GestureDetector
作为 ImageView
的新子类的构造函数参数我创造的?fling
的非常简单的 Activity 。检测工作:SelectFilterActivity (Adapted from photostream) .感谢 Code Shogun ,我根据自己的情况调整了他的代码。
让您的 Activity 实现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)
Activity 和onFling
手势监听器。public void onClick(View v) {
Filter f = (Filter) v.getTag();
FilterFullscreenActivity.show(this, input, f);
}
关于android - 网格布局上的 Fling 手势检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/937313/
欢迎光临 OStack程序员社区-中国程序员成长平台 (http://ostack.cn/) | Powered by Discuz! X3.4 |