我在Android应用中定义了自己的手势.这是定义手势的唯一方法吗?
是否有任何标准的开源库已经有手势的原始文件?
在过去的几个小时里,我一直在挣扎,用google搜索谷歌的地狱,StackOverflow或其他地方的例子都不适合我,所以在这里......
我有一个自定义视图,那extends LinearLayout and implements GestureDetector.OnGestureListener.
在我的自定义布局中,我有3个按钮,每个按钮都有一个点击监听器.我想要的是能够在视图中随处执行以执行某些操作,但也可以单击按钮.
如果我在视图内部而不是通过其中一个按钮,我的onFling功能可以很好地工作.如果我扔过其中一个按钮,它会在大多数情况下执行单击,或者在某些情况下执行任何操作.
这是我的代码的相关部分:
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
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) {
viewFlipper.setInAnimation(slideLeftIn);
viewFlipper.setOutAnimation(slideLeftOut);
viewFlipper.showNext();
return true;
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
viewFlipper.setInAnimation(slideRightIn);
viewFlipper.setOutAnimation(slideRightOut);
viewFlipper.showPrevious();
return true;
}
return false;
}
@Override
public …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序(在Galaxy Nexus上),我注意到当你从屏幕底部滑动到屏幕上时谷歌实施了"Google Now"应用程序(Chrome浏览器也做了一段时间,而不是确定它是否仍然存在).我一直在环顾四周,但一直无法确定他们是如何做到这一点的.有没有一种简单的方法来处理从挡板而不是屏幕开始的手势?
我检查了开发人员页面以供参考,但我能找到的唯一文章是:
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; …Run Code Online (Sandbox Code Playgroud) 我正在研究android中的Gesture活动我用class来检测滑动动作是什么
public class ActivitySwipeDetector implements View.OnTouchListener {
static final String logTag = "ActivitySwipeDetector";
private Activity activity;
static final int MIN_DISTANCE = 100;
private float downX, downY, upX, upY;
public ActivitySwipeDetector(Activity activity){
this.activity = activity;
}
public void onRightToLeftSwipe(){
Log.i(logTag, "RightToLeftSwipe!");
Toast.makeText(activity, "RightToLeftSwipe", Toast.LENGTH_SHORT).show();
//activity.doSomething();
}
public void onLeftToRightSwipe(){
Log.i(logTag, "LeftToRightSwipe!");
Toast.makeText(activity, "LeftToRightSwipe", Toast.LENGTH_SHORT).show();
//activity.doSomething();
}
public void onTopToBottomSwipe(){
Log.i(logTag, "onTopToBottomSwipe!");
//Toast.makeText(activity, "onTopToBottomSwipe", Toast.LENGTH_SHORT).show();
//activity.doSomething();
}
public void onBottomToTopSwipe(){
Log.i(logTag, "onBottomToTopSwipe!");
//Toast.makeText(activity, "onBottomToTopSwipe", Toast.LENGTH_SHORT).show();
//activity.doSomething();
}
public boolean onTouch(View v, MotionEvent …Run Code Online (Sandbox Code Playgroud) 无论如何都要防止ListView在Android中双击?当我意外地敲击物品时,我发现了这个ListView,它打开了两个新窗口.有没有办法防止它两次打开同一个窗口.
用这个
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
Run Code Online (Sandbox Code Playgroud)
仅检测单击事件,即快速点击和释放.如果我按住然后释放,onSingleTapUp则不会被呼叫.
我正在寻找一个ACTION_UP持续下去的动作事件.
我看了看onShowPress,当用户执行关闭操作的调用,但那时我不知道如何检测ACTION_UP的同时onShowPress.
请注意,这是为了recycler view单击项目.目前,我可以单击一个有效的项目,但如果我按住它然后释放,则不会调用它.
如何使用电话和Tinder应用程序中的手势和动画滑动到以前的活动?
我有一些想要用线连接的对象。用户应该能够通过简单的线条手势来完成此操作。我使用 GestureOverlayView 并阅读该文章http://developer.android.com/resources/articles/gestures.html,其中内容如下
orientation:指示下方视图的滚动方向。在这种情况下,列表垂直滚动,这意味着任何水平手势(如action_delete)都可以立即被识别为手势。以垂直笔画开始的手势必须至少包含一个水平分量才能被识别。换句话说,简单的垂直线不能被识别为手势,因为它会与列表的滚动冲突。
这就是我的问题 - 我想画水平和垂直的线
现在我有一个 OnGesturePerfomedListener,它执行正常的手势识别,另外还有一个 GestureOverlayView.OnGestureListener,我在其中检测线条。但现在我想画一条虚线 - 也垂直和水平。如果我能像 OnGesturePerformedListener 中那样获得完整的手势,而不是像 onGestureListener 中那样获得虚线的每一个笔划,那就容易多了。
我有什么想法可以轻松解决这个问题吗?是否有一种方法,在手势完成时被调用,即使它未被识别?我还尝试使用 GestureDetector.OnGestureListener,我现在用它来检测长按,但它无助于解决该问题。
我GestureDetector.OnGestureListener在 Activity 中实现,其覆盖的 onTouchEvent 是:
public boolean onTouchEvent(MotionEvent event) {
//gestureDetector is new GestureDetector(this,this) in Activity's onCreate()
this.gestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
使用 MotionEvent 类中的 getEdgeFlags 进行边缘检测,如下所示:
@Override
public boolean onDown(MotionEvent e) {
final int edgeInfo = e.getEdgeFlags();
return ((edgeInfo == MotionEvent.EDGE_LEFT) || (edgeInfo == MotionEvent.EDGE_RIGHT)) ||
(edgeInfo == MotionEvent.EDGE_BOTTOM);
}
Run Code Online (Sandbox Code Playgroud)
但是 onDown 总是返回 false。我也试过改变
final int edgeInfo = e.getEdgeFlags(); 到
final int edgeInfo = e.getAction() & e.getEdgeFlags();
以及final int edgeInfo = e.getActionMasked() & e.getEdgeFlags();以防万一。
却无济于事。
我看过 …
我在这里看到了一些解决方案,但没有一个对我有用。我正在使用View.OnTouchListener类来检测我的应用程序代码中的单击和拖动事件。但是那个美丽的涟漪效应现在已经消失了(也许是因为我在MotionEvent手势到达View.OnClickListener. 注意return trueinMotionEvent.ACTION_DOWN块之前消耗了这些手势)。
我不能View.OnClickListener用来检测点击事件,因为我的应用程序使用多个复合手势(点击、点击、点击、点击、拖动等)。任何人都可以分享一些有关如何使用 Android 触摸手势创建涟漪效果的提示吗?
这是我View.OnTouchListener在BaseAdapter类中实现的代码片段:
v.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent ev) {
switch (ev.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
if(mAppActionDownListener != null) {
mAppActionDownListener.onAppActionDown(appObjectList.get(position), v);
}
Log.d("COOK", "ACTION_DOWN: " + ev.getX() + ", " + ev.getY());
t1 = System.currentTimeMillis();
return true;
case MotionEvent.ACTION_UP:
Log.d("COOK", "ACTION_UP: " + ev.getX() + ", " + ev.getY());
t2 = System.currentTimeMillis();
if(Math.abs(t2-t1) <=300) …Run Code Online (Sandbox Code Playgroud) user-interface android ontouchlistener android-gesture rippledrawable