Ассаламуаликум Всем: Я делаю панель комментариев, как это делает приложение 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);
}