【问题标题】:Gestures - control volume and brightness手势 - 控制音量和亮度
【发布时间】:2018-08-18 18:15:45
【问题描述】:

我正在尝试构建一个使用手势来控制音量和亮度的应用。 我看过很少的视频告诉如何使用手势,但不知道如何控制音量和亮度。我的主要目标是当我在屏幕左侧滑动时它控制音量,如果我在屏幕右侧滑动它控制亮度。 我发现使用手势的唯一代码是:

    class MyGestureListener extends GestureDetector.SimpleOnGestureListener {

    @Override
    public boolean onDown(MotionEvent event) {
        Log.d("TAG","onDown: ");

        // don't return false here or else none of the other 
        // gestures will work
        return true;
    }

    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        Log.i("TAG", "onSingleTapConfirmed: ");
        return true;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        Log.i("TAG", "onLongPress: ");
    }

    @Override
    public boolean onDoubleTap(MotionEvent e) {
        Log.i("TAG", "onDoubleTap: ");
        return true;
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, 
                            float distanceX, float distanceY) {
        Log.i("TAG", "onScroll: ");
        return true;
    }

    @Override
    public boolean onFling(MotionEvent event1, MotionEvent event2,
                           float velocityX, float velocityY) {
        Log.d("TAG", "onFling: ");
        return true;
    }
}
}

有什么想法可以从哪里开始吗?

【问题讨论】:

    标签: android gestures


    【解决方案1】:

    这是我在 SO 中的第一个答案。我在这里发布了一些用于控制音量的代码。此代码使用 OnTouchListener 进行触摸事件,而不是 GestureDetector。

    也许这有帮助..

    //variable
    
        private RelativeLayout mRlTouch;
        private boolean intLeft, intRight;
        private int sWidth, sHeight;
        private long diffX, diffY;
        private Display display;
        private Point size;
        private float downX, downY;
        private AudioManager mAudioManager;
    
    
           //onCreate method
    
    
          @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_volume_and_brightness_prac);
    
            ///THIS LAYOUT IMPLEMENT TOUCH EVENT
            mRlTouch = findViewById(R.id.rl_volume_touch);
    
            mAudioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
        }
    
    
    
           ///THIS METHOD FOR GET SCREEN SIZE 
           /// USE FOR DETECT SCREEN SIDE
    
          private void getScreenSize() {
            display = getWindowManager().getDefaultDisplay();
            size = new Point();
            display.getSize(size);
            sWidth = size.x;
            sHeight = size.y;
        }
    
    
    
    
         /////onTouch method
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
    
                    //touch is start
                    downX = event.getX();
                    downY = event.getY();
                    if (event.getX() < (sWidth / 2)) {
    
                        //here check touch is screen left or right side
                        intLeft = true;
                        intRight = false;
    
                    } else if (event.getX() > (sWidth / 2)) {
    
                        //here check touch is screen left or right side
                        intLeft = false;
                        intRight = true;
                    }
                    break;
    
                case MotionEvent.ACTION_UP:
    
                case MotionEvent.ACTION_MOVE:
    
                    //finger move to screen
                    float x2 = event.getX();
                    float y2 = event.getY();
    
                    diffX = (long) (Math.ceil(event.getX() - downX));
                    diffY = (long) (Math.ceil(event.getY() - downY));
    
                    if (Math.abs(diffY) > Math.abs(diffX)) {
                        if (intLeft) {
                            //if left its for brightness
    
                            if (downY < y2) {
                                //down swipe brightness decrease
                            } else if (downY > y2) {
                                //up  swipe brightness increase
                            }
    
                        } else if (intRight) {
    
                            //if right its for audio
                            if (downY < y2) {
    
                                //down swipe volume decrease
                                mAudioManager.adjustVolume(AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND);
    
                            } else if (downY > y2) {
    
                                //up  swipe volume increase
                                mAudioManager.adjustVolume(AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND);
                            }
                        }
                    }
            }
            return true;
        }
    

    【讨论】:

    • 你没有提到亮度,它是如何检测屏幕尺寸的?
    猜你喜欢
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 2013-10-15
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多