我正在研究应用程序(在Galaxy Nexus上),并且我注意到当您从挡板底部滑动到屏幕上时,Google实施了“Google即时”应用程序(Chrome浏览器也是做了这一段时间,不知道它是否仍然如此)。我一直在环顾四周,但一直无法确定他们是如何完成这一任务的。是否有一种简单的方法可以处理从屏幕上而不是屏幕上开始的手势?与Android的边框手势
我检查了参考开发商的页面,但我唯一能找到的文章在这里:
http://developer.android.com/design/patterns/gestures.html
还有其它地方在这个信息将是可用的?
[编辑]
我一直很失败让边缘手势的工作基础上Lain_B的方法,但不能使它工作。下面是我使用的尝试和检测手势的代码,但logcat的总是输出零...
public class MainActivity extends Activity implements OnGestureListener {
private GestureDetector myGesture;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myGesture = new GestureDetector(getBaseContext(),
(OnGestureListener) this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.e("Flags Touch", "Flags: " + event.getEdgeFlags());
return myGesture.onTouchEvent(event);
}
@Override
public boolean onDown(MotionEvent e) {
Log.e("Flags", "Flags: " + e.getEdgeFlags());
Log.e("Event", "onDown");
// TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent e) {
Log.e("Event", "onLongPress");
// TODO Auto-generated method stub
}
@Override
public void onShowPress(MotionEvent e) {
Log.e("Flags", "Flags: " + e.getEdgeFlags());
Log.e("Event", "onShowPress");
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.e("Event", "onSingleTapUp");
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// Log.e("Event", "onScroll");
return false;
}
// these constants are used for onFling
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;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Log.e("Event", "onFling");
Log.e("Flags", "Flags: " + e1.getEdgeFlags());
if (e1.getEdgeFlags() == MotionEvent.EDGE_LEFT) {
// code to handle swipe from left edge
Log.e("!!!!!", "Edge fling!");
}
try {
// do not do anything if the swipe does not reach a certain length
// of distance
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) {
}
// left to right swipe
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) < SWIPE_THRESHOLD_VELOCITY) {
}
} catch (Exception e) {
// nothing
}
return false;
}
}
[编辑2]
随着Lain_B的要求输出...
(使用Nexus 7)...从挡板上最左侧的可能点开始,向右滑动到中间(ish)。
08-16 16:44:13.674: I/Fling(16702): Flags: 0
08-16 16:44:13.674: I/Fling(16702): e1: 2.5 711.5152
08-16 16:44:13.674: I/Fling(16702): e2: 215.4591 717.08105
从屏幕的中心点,关闭屏幕上滑动(右侧)
08-16 16:46:37.364: I/Fling(16702): Flags: 0
08-16 16:46:37.364: I/Fling(16702): e1: 392.5 758.1818
08-16 16:46:37.364: I/Fling(16702): e2: 783.4375 743.3334
我不知道,但你在找这个? http://developer.android.com/reference/android/view/GestureDetector.html – 2012-08-15 13:54:19
我已经在使用手势监听器,我只是试图确定如何从屏幕边界外启动时如何实现它。 – RyanInBinary 2012-08-15 13:58:11