Drawer-Layout не обнаруживает событие смахивания внутри после добавления к нему анимации

Ассаламуаликум Всем: Я делаю панель комментариев, как это делает приложение Google Plus. Я использую макет ящика и библиотеку обновления по запросу ( https://github.com/naver/android-pull-to-refresh ) внутри этого макета ящика, чтобы показать комментарии. Затем я добавил еще одну функцию в этот список, а именно: когда я прокручиваю в другом направлении, появляется кнопка удаления с анимацией для удаления любого комментария. Моя проблема в том, что когда я прокручиваю, чтобы открыть кнопку удаления в любой строке, макет ящика не закрывается, если я не прокручиваю элементы списка. Если я прокручиваю ниже элементов списка, он не закрывает макет ящика. Я добавил сенсорное событие в список и установил его высоту, чтобы заполнить родителя, чтобы решить эту проблему, но сенсорное событие обнаруживается только в элементах списка не ниже списка. Поэтому я не могу закрыть кнопку удаления под списком.

Фрагмент кода ниже — это код моего класса связывателя комментариев:

 // To animate view slide out from top to bottom
    public void slideToRight(View view, boolean firstTime) {

        TranslateAnimation animate = new TranslateAnimation(-deleteButton.getWidth(), 0, 0, 0);
        animate.setDuration((firstTime) ? 0 : 500);
        animate.setFillAfter(true);
        if (!firstTime) {
            view.startAnimation(animate);
        }
        animate = new TranslateAnimation(0, deleteButton.getWidth() * 2, 0, 0);
        animate.setDuration((firstTime) ? 0 : 500);
        animate.setFillAfter(true);
        deleteButton.startAnimation(animate);


        // deleteButton.setVisibility(GONE);
     //   Log.d(LOG_TAG, "test:" + "Swipe Left to Right");
    }

    // To animate view slide out from bottom to top
    public void slideToLeft(View view, boolean firstTime) {
        TranslateAnimation animate = new TranslateAnimation(0, -deleteButton.getWidth(), 0, 0);
        animate.setDuration((firstTime) ? 0 : 500);
        animate.setFillAfter(true);
        view.startAnimation(animate);
        animate = new TranslateAnimation(deleteButton.getWidth(), 0, 0, 0);
        animate.setDuration((firstTime) ? 0 : 500);
        animate.setFillAfter(true);
//        deleteButton.setVisibility(VISIBLE);
        deleteButton.startAnimation(animate);
       // Log.d(LOG_TAG, "test:" + "Swipe Right to Left");
    }

    public void changeDeltebuttonUIVisibilty(boolean status) {
        if (((getFirstCommentUser() != null) && (getThisUser() != null) && (getFirstCommentUser().getUserId().equals(getThisUser().getUserId())))||(ConvoMain.deleteCounter1>0||deleteCounter>0)) {


            if (commentDeleteListener != null) {



                if (status && ((ConvoMain.deleteCounter1 == 0)&&(deleteCounter==0))&&deleteButton.getVisibility() != VISIBLE) {
                    commentUserNameTimetxt.setMovementMethod(null);
                    conversation.isSelectedForDelete=true;
                    CommentItemBinder.selectedForDeleteConversation=conversation;
                    commentItemInnerContainer.startAnimation(fadeIn);
//                    commentUserNameTimetxt.setMovementMethod(null);

                    deleteButton.setVisibility(VISIBLE);
                    slideToLeft(commentInnerContainer, false);
                    //
                 //   Log.d(LOG_TAG, "Conversation deletion selected: " + conversation.conversationID);



                    test++;
                    //slideToLeft(deleteButton);

                            ConvoMain.context.lockCommentDrawer();

                    deleteCounter++;
                    ConvoMain.deleteCounter1++;
                    deleteButton.setOnClickListener(deleteButtonListener);

                } else if (deleteButton.getVisibility() == VISIBLE && ((ConvoMain.deleteCounter1 > 0)||(deleteCounter > 0))) {
                    commentUserNameTimetxt.setMovementMethod(linkMovementMethod1);

                    commentItemInnerContainer.startAnimation(fadeOut);


                    slideToRight(commentInnerContainer, false);

                    deleteButton.setOnClickListener(null);

                    deleteCounter = 0;
                    ConvoMain.deleteCounter1 = 0;
                    deleteButton.setVisibility(GONE);

                    conversation.isSelectedForDelete = false;
                    CommentItemBinder.selectedForDeleteConversation=null;
                    new Handler().postDelayed(new Runnable() {
                        public void run() {
                            ConvoMain.context.unlockCommentDrawer();
                            deleteButton.clearAnimation();
                            commentInnerContainer.clearAnimation();
                        }
                    }, 500);


                    // commentUserNameTimetxt.setMovementMethod(linkMovementMethod1);
                } else if((deleteButton.getVisibility() != VISIBLE)&& (ConvoMain.deleteCounter1>0)){


                    commentDeleteListener.onSwipeLeft("reset");

//                    commentItemInnerContainer.startAnimation(fadeOut);
//                    commentUserNameTimetxt.setMovementMethod(linkMovementMethod1);
//
//                    LinearLayout.LayoutParams params2 = (LinearLayout.LayoutParams) deleteButton.getLayoutParams();
//                    deleteButton.setVisibility(GONE);
                    //conversation.isSelectedForDelete = false;

                    ConvoMain.context.unlockCommentDrawer();
                }

            }
        } else {
            deleteButton.setVisibility(GONE);
            //conversation.isSelectedForDelete = false;
        }
    }

    OnClickListener deleteButtonListener = new OnClickListener() {
        @Override
        public void onClick(View view) {

            changeDeltebuttonUIVisibilty(false);
//           commentContenttxt.setEnabled(true);
//           commentUserNameTimetxt.setEnabled(true);
           // commentUserNameTimetxt.setMovementMethod(linkMovementMethod1);
            commentInnerContainer.startAnimation(fadeOut);

            commentDeleteListener.onSwipeLeft(conversation.conversationID);
            new Handler().postDelayed(new Runnable() {
                public void run() {
                    ConvoMain.context.unlockCommentDrawer();
                }
            }, 400);

        }
    };


    OnTouchListener onThumbTouch = new OnSwipeTouchListener(getContext()) {


        public boolean onTouch(View v, MotionEvent event) {

            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN: {
                    deleteLock = false;
                    deleteUnLock = false;
                    downX = event.getX();
                    downY = event.getY();
                   // android.util.Log.d(LOG_TAG, "Action Down");
                    // mSwipeDetected = Action.None;
                    //   ConvoMain.context.lockCommentDrawe//);
//                return false; // allow other events like Click to be processed
                }

                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL:
                case MotionEvent.ACTION_MOVE: {
                    upX = event.getX();
                    upY = event.getY();
//                    android.util.Log.d(LOG_TAG, "Action Move");
                    float deltaX = downX - upX;
                    float deltaY = downY - upY;
//                    android.util.Log.d(LOG_TAG, "Action Move:"+deltaX+":"+deltaY);
                    // horizontal swipe detection

                    if ((deltaX > 0)) {

                        if (!deleteLock)
                            if ((Math.abs(deltaX)) > (HORIZONTAL_MIN_DISTANCE)) {
                               // android.util.Log.d(LOG_TAG, "Swipe Right to Left");
                                if ((deleteCounter == 0) && (ConvoMain.deleteCounter1 == 0)) {

                                    changeDeltebuttonUIVisibilty(true);
                                    //ConvoMain.context.lockCommentDrawer();
                                    deleteUnLock = true;
                                    //counter = 0;
                                    return false;
                                }

                                //return true;

                            }


                    }
                    if (deltaX <= 0) {
                        if (!deleteUnLock) {
                            if (deleteCounter > 0 || ConvoMain.deleteCounter1 > 0) {

                                if ((Math.abs(deltaX)) < (HORIZONTAL_MIN_DISTANCE)) {
                                  //  android.util.Log.d(LOG_TAG, "Swipe Left to Right");
//                            if ((deleteCounter == 0)&&(ConvoMain.deleteCounter1==0)) {

                                    changeDeltebuttonUIVisibilty(false);

                                    deleteLock = true;
                                    return false;
                                    //counter = 0;
//                            }
                                    //return true;

                                }
                            }else{

                            }
                        }


                    }
                    //return true;
                }
            }
            //MotionEvent.ACTION_DOWN

            return false;
        }
    };


    public void setCommentDeleteListener(commentDeleteListener commentDeleteListener) {
        // changeDeltebuttonUIVisibilty(false);
        this.commentDeleteListener = commentDeleteListener;
    }

    private commentDeleteListener commentDeleteListener;

    public static interface commentDeleteListener {
        public void onSwipeLeft(String test);

    }

person Umair Qudus    schedule 27.01.2015    source источник


Ответы (2)


сначала разблокируй потом попробуй закрыть

person Umair Qudus    schedule 27.01.2015

Ребята, я нашел ответ на свой вопрос: когда я открывал ящик, он блокировался, что вызывало проблему с обнаружением события смахивания. Но теперь я разблокировал его, и это решило мою проблему... :)

person Umair Qudus    schedule 27.01.2015