Инициировать событие. ACTION_DOWN из ACTION_MOVE ОТ одного представления к другому - PullRequest
0 голосов
/ 22 февраля 2019

Я нахожусь в процессе создания игры.У меня все настроено для движений.У меня есть два отдельных вида для левого и правого направления.Для того, чтобы двигаться влево и вправо, вы должны нажать на один подъем и нажать на другой, что нормально.Я также хочу дать пользователю возможность скользить от одного к другому и получать те же результаты.В процессе ACTION_DOWN перейдите в другое представление и активируйте ACTION_DOWN.Возможно ли это с помощью ACTION_MOVE?

private void initializeLogic() {
    walk = 0;
    timer = new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    int bw = board.getMeasuredWidth()/2;

                    width = bw;
                }
            });
        }
    };
    _timer.schedule(timer, (int)(1000));
    left.setOnTouchListener(new View.OnTouchListener() {
        @Override public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_MOVE:

                return true;
                case MotionEvent.ACTION_DOWN:
                leftTimer = new TimerTask() {
                    @Override public void run() {
                        runOnUiThread(new Runnable() {
                            @Override public void run() {
                                android.setTranslationX((float)(android.getTranslationX() - SketchwareUtil.getDip(getApplicationContext(), (int)(2))));
                                android.requestFocus();
                                direction = 1;
                                if (switch_img == 0) {
                                    _updateFrameLeft(walk % 20);
                                    walk++;
                                }
                            }});}};
                _timer.scheduleAtFixedRate(leftTimer, (int)(0), (int)(25));
                return true;
                case MotionEvent.ACTION_UP:
                walk = 0;
                if (switch_img == 0) {
                    android.setImageResource(R.drawable.androidstand_left);
                }
                leftTimer.cancel();
                return true;
            } return false; }});
    right.setOnTouchListener(new View.OnTouchListener() {
        @Override public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_MOVE:

                return true;
                case MotionEvent.ACTION_DOWN:
                rightTimer = new TimerTask() {
                    @Override public void run() {
                        runOnUiThread(new Runnable() {
                            @Override public void run() {
                                android.setTranslationX((float)(android.getTranslationX() + SketchwareUtil.getDip(getApplicationContext(), (int)(2))));
                                android.requestFocus();
                                direction = 0;
                                if (switch_img == 0) {
                                    _updateFrame(walk % 20);
                                    walk++;
                                }
                            }});}};
                _timer.scheduleAtFixedRate(rightTimer, (int)(0), (int)(25));
                return true;
                case MotionEvent.ACTION_UP:
                walk = 0;
                if (switch_img == 0) {
                    android.setImageResource(R.drawable.androidstand);
                }
                rightTimer.cancel();
                return true;
            } return false; }});
}
...