【问题标题】:using Swiping Gestures from top to bottom control the volume in android使用从上到下滑动手势控制android中的音量
【发布时间】:2018-02-08 07:24:29
【问题描述】:

我想用滑动手势控制音量,如果我在屏幕上从上到下滑动,它应该减小,我从下到上滑动,它应该增加音量。而不是使用音量按钮。

【问题讨论】:

  • 先查看这个链接stackoverflow.com/help/how-to-ask
  • 那么您有什么问题?你已经做了什么?
  • 在布局上设置一个触摸监听器并解释动作。 请发布一些代码(向我们展示您尝试过的内容),以便其他人可以帮助您并在发布问题之前检查链接@MaciejBiałorucki
  • 你知道如何设置监听器或音量吗?

标签: android android-audiomanager


【解决方案1】:
abstract class OnSwipeTouchListener implements OnTouchListener {

    enum Direction{
        LEFT, RIGHT, UP, DOWN;
    }

    private final static String TAG = "ClickFrame";
    private final static int SWIPE_THRESHOLD = 100;

    // 0: uninitialized
    // 1: horizontal
    // 2: vertical
    private int initialGesture;

    protected float initialX;
    protected float initialY;
    private float decidedX;
    private float decidedY;
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int action = event.getActionMasked();
        switch (action) {

            case MotionEvent.ACTION_DOWN:
                initialX = event.getX();
                initialY = event.getY();
                initialGesture = 0;
                break;

            case MotionEvent.ACTION_MOVE:
                float deltaX;
                float deltaY;
                if(initialGesture == 0) {
                    deltaX = event.getX() - initialX;
                    deltaY = event.getY() - initialY;
                }
                else{
                    deltaX = event.getX() - decidedX;
                    deltaY = event.getY() - decidedY;
                }

                if(initialGesture == 0 && Math.abs(deltaX) > SWIPE_THRESHOLD){
                    initialGesture = 1;
                    decidedX = event.getX();
                    decidedY = event.getY();
                    if(deltaX > 0){
                        onBeforeMove(Direction.RIGHT);
                    }
                    else{
                        onBeforeMove(Direction.LEFT);
                    }
                }
                else if(initialGesture == 0 && Math.abs(deltaY) > SWIPE_THRESHOLD){
                    initialGesture = 2;
                    decidedX = event.getX();
                    decidedY = event.getY();
                    if(deltaY > 0){
                        onBeforeMove(Direction.DOWN);
                    }
                    else{
                        onBeforeMove(Direction.UP);
                    }
                }

                if(initialGesture == 1){
                    if(deltaX > 0){
                        onMove(Direction.RIGHT, deltaX);
                    }
                    else{
                        onMove(Direction.LEFT, -deltaX);
                    }
                }
                else if(initialGesture == 2){
                    if(deltaY > 0){
                        onMove(Direction.DOWN, deltaY);
                    }
                    else{
                        onMove(Direction.UP, -deltaY);
                    }
                }

                break;

            case MotionEvent.ACTION_UP:
                deltaX = event.getX() - initialX;
                deltaY = event.getY() - initialY;

                if(initialGesture == 0){
                    onClick();
                    return true;
                }
                onAfterMove();
                initialGesture = 0;
                return true;

            case MotionEvent.ACTION_CANCEL:
                break;

            case MotionEvent.ACTION_OUTSIDE:
                break;
        }

        return true;
    }

    public abstract void onMove(Direction dir, float diff);

    public abstract void onClick();

    public abstract void onAfterMove();

    public abstract void onBeforeMove(Direction dir);
}

那么 mClickFrame.setOnTouchListener(clickFrameSwipeListener);

【讨论】:

  • 使用GestureDetector只需几行代码即可完成以上所有操作
【解决方案2】:

正如@pskink 所指出的,正确的方法是使用GestureDetector (https://github.com/libgdx/libgdx/wiki/Gesture-detection) 并在GestureListener 上实现pan/panStop 来检测入口位置和出口位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多