Лучший способ переместить элементы изменения размера? - PullRequest
0 голосов
/ 12 июня 2019

Каждый раз, когда я использую 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, и как я могу изменить его размер (установить ширину и длину), касаясь элемента?

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

1 Ответ

1 голос
/ 12 июня 2019

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

папка anim внутри папки res

Создать файл 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>

Создать файл 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>

Создать файл 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>

Создать файл 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 для анимации фрагмента сверху вниз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...