Лучший способ переместить элементы изменения размера?

Каждый раз, когда я использую RecylerView или что-то еще для хранения других элементов, у меня возникает проблема, заключающаяся в том, что я не знаю, как перемещать их и работать с ними.

Например, для перемещения таких элементов, как CardViews в RecylerView, лучший или самый простой способ — использовать java ItemTouchHelper. Например:

ItemTouchHelper


ItemTouchHelper helper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.RIGHT | ItemTouchHelper.LEFT, ItemTouchHelper.DOWN) {
      @Override
      public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder dragged, @NonNull RecyclerView.ViewHolder target) {
      int position_dragged = dragged.getAdapterPosition();
      int position_target = target.getAdapterPosition();
      c_TakeTimeObjects draggedObj = SelectedList.get(position_dragged);
      c_TakeTimeObjects targetObj = SelectedList.get(position_target);

      if (draggedObj.getbIsEditable() && targetObj.getbIsEditable()) {
           Collections.swap(SelectedList, position_dragged, position_target);
           mAdapter.notifyItemMoved(position_dragged, position_target);
      }

      return false;
    }

     @Override
     public void onSwiped(@NonNull RecyclerView.ViewHolder swiped, int i) {
     int position_swiped = swiped.getAdapterPosition();
     c_TakeTimeObjects c_takeTimeObjects = SelectedList.get(position_swiped);
         if (c_takeTimeObjects.getbIsEditable()){
         SelectedList.remove(c_takeTimeObjects);
         mAdapter.notifyItemRemoved(position_swiped);
          }
     }
});

В некоторых случаях это прекрасно работает, но как я могу создать такое поведение движения самостоятельно или как я могу реализовать такие вещи, как изменение размера элемента на ощупь?

Например, у меня есть CardView внутри Recylerview, и как я могу изменить его размер (установить ширину и длину), коснувшись элемента?

Я пытаюсь понять это движение и сенсорное поведение.

Реализовать детектор жестов и добавить анимацию перехода фрагмента слева направо, справа налево, сверху вниз или снизу вверх в зависимости от жеста. Вам просто нужно выбрать, к какому фрагменту перейти.

Abbas 12.06.2019 09:31
1
1
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны создать файл анимации, чтобы преформировать анимацию слайдов между фрагментами. Поместите все эти файлы xml в

anim folder inside res folder

Create file right_in.xml

<?xml version = "1.0" encoding = "utf-8"?>
<set xmlns:android = "http://schemas.android.com/apk/res/android"
android:shareInterpolator = "false">
<translate
    android:duration = "@integer/default_transaction_animation_duration"
    android:fromXDelta = "100%"
    android:fromYDelta = "0%"
    android:toXDelta = "0%"
    android:toYDelta = "0%" />
</set>

Create file left_out.xml

<?xml version = "1.0" encoding = "utf-8"?>
 <set xmlns:android = "http://schemas.android.com/apk/res/android"
android:shareInterpolator = "false">
<translate
    android:duration = "@integer/default_transaction_animation_duration"
    android:fromXDelta = "0%"
    android:fromYDelta = "0%"
    android:toXDelta = "100%"
    android:toYDelta = "0%" />
</set>

Create file left_in.xml

<?xml version = "1.0" encoding = "utf-8"?>
<set xmlns:android = "http://schemas.android.com/apk/res/android"
android:shareInterpolator = "false">
<translate
    android:duration = "@integer/default_transaction_animation_duration"
    android:fromXDelta = "-100%"
    android:fromYDelta = "0%"
    android:toXDelta = "0%"
    android:toYDelta = "0%" />
</set>

Create file left_out.xml

<?xml version = "1.0" encoding = "utf-8"?>
 <set xmlns:android = "http://schemas.android.com/apk/res/android"
android:shareInterpolator = "false">
<translate
    android:duration = "@integer/default_transaction_animation_duration"
    android:fromXDelta = "0%"
    android:fromYDelta = "0%"
    android:toXDelta = "-100%"
    android:toYDelta = "0%" />
</set>

Теперь создайте метод для вызова вашего фрагмента

 public void openFragment1() {
    Fragment_1 fragment = new Fragment_1();
    getSupportFragmentManager().beginTransaction()
            .setCustomAnimations(R.anim.right_in, R.anim.left_out, R.anim.left_in, R.anim.right_out)
            .add(R.id.container_between, fragment, Fragment_1.TAG)
            .addToBackStack(Fragment_1.TAG).commit();
}

Аналогичным образом создайте еще 2 файла xml top.xml и bottom.xml для анимации фрагмента сверху вниз.

Другие вопросы по теме