Каждый раз, когда я использую RecylerView или что-то еще для хранения других элементов, у меня возникает проблема, заключающаяся в том, что я не знаю, как перемещать их и работать с ними.
Например, для перемещения таких элементов, как CardViews в RecylerView, лучший или самый простой способ — использовать java 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, и как я могу изменить его размер (установить ширину и длину), коснувшись элемента?
Я пытаюсь понять это движение и сенсорное поведение.
Вы должны создать файл анимации, чтобы преформировать анимацию слайдов между фрагментами. Поместите все эти файлы 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 для анимации фрагмента сверху вниз.
Реализовать детектор жестов и добавить анимацию перехода фрагмента слева направо, справа налево, сверху вниз или снизу вверх в зависимости от жеста. Вам просто нужно выбрать, к какому фрагменту перейти.