Android 我可以在小部件中向AdapterViewLipper添加垂直滑动手势吗?

Android 我可以在小部件中向AdapterViewLipper添加垂直滑动手势吗?,android,widget,Android,Widget,我正在开发一个包含AdapterViewLipper的。AdapterViewLipper可以自动翻转视图(包括每个视图)。但是我们可以通过垂直滑动手动切换到下一个或上一个视图吗?AdapterViewLipper(类似于StackView)是否自动支持此功能,或者我必须在每个视图中添加手势侦听器 提前谢谢 您可以使用手势检测器执行此操作 private GestureDetectorCompat mDetector; 然后,您可以@覆盖活动的onTouchEvent @Override

我正在开发一个包含AdapterViewLipper的。AdapterViewLipper可以自动翻转视图(包括每个视图)。但是我们可以通过垂直滑动手动切换到下一个或上一个视图吗?AdapterViewLipper(类似于StackView)是否自动支持此功能,或者我必须在每个视图中添加手势侦听器

提前谢谢


您可以使用手势检测器执行此操作

private GestureDetectorCompat mDetector;

然后,您可以@覆盖活动的onTouchEvent

@Override 
    public boolean onTouchEvent(MotionEvent event){ 
        this.mDetector.onTouchEvent(event);
        return super.onTouchEvent(event);
    }

或者您也可以为AdapterViewLipper设置TouchListener

 avf.setOnTouchListener(new View.OnTouchListener(){
     @Override
     public boolean onTouch(View v, MotionEvent event) {
         return mDetector.onTouchEvent(event);
     }
 });

类MyGestureListener扩展了GestureDetector.SimpleOnGestureListener{ 私有静态最终字符串调试_TAG=“手势”; @凌驾 公共布尔onDown(MotionEvent事件){ d(DEBUG_标记,“onDown:+event.toString()); 返回true; } @凌驾 公共布尔onFling(MotionEvent开始、MotionEvent结束、float-velocityX、float-velocityY){ if(start.getRawY() 这可能也有帮助


我想澄清我的问题。AdapterViewLipper位于一个小部件中,我们可以在其中获得的始终是RemoteView。在这种情况下,我还能在视图中添加手势监听器吗?对不起,我的问题似乎有些误解。AdapterViewLipper位于一个小部件中,我们可以在其中获得的始终是RemoteView。在这种情况下,我仍然可以将GestureListener添加到视图中吗?是的,您可以将触控监听器添加到任何视图中,并在ontouch中将事件传递到您的手势监听器
 avf.setOnTouchListener(new View.OnTouchListener(){
     @Override
     public boolean onTouch(View v, MotionEvent event) {
         return mDetector.onTouchEvent(event);
     }
 });
class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
    private static final String DEBUG_TAG = "Gestures"; 

    @Override
    public boolean onDown(MotionEvent event) { 
        Log.d(DEBUG_TAG,"onDown: " + event.toString()); 
        return true;
    }

    @Override
    public boolean onFling(MotionEvent start, MotionEvent finish, float velocityX, float velocityY) {
        if (start.getRawY() < finish.getRawY()) {
            //down
        } else {
            //up
        }
    return true;
    }
}