Переключить элементный элемент между элементом recyclerview внутри фрагмента viewpager для фрагмента viewpager

Если вы делаете заметку каждый раз, когда один из ваших интервалов ввода открывается или закрывается, вы можете делать то, что хотите, объединяя ключи opens и closes, сортировать в упорядоченный набор, «Хорошо, допустим, допустим, что каждая смежная пара чисел образует интервал, тогда я могу сосредоточить всю свою логику на этих интервалах как дискретные куски».

myRange = range(201)
intervals = [(1,5), (2,8), (9,12), (20,30)]
opens = {}
closes = {}

def open(index):
    if index not in opens:
        opens[index] = 0
    opens[index] += 1

def close(index):
    if index not in closes:
        closes[index] = 0
    closes[index] += 1

for start, end in intervals:
    if end > start: # Making sure to exclude empty intervals, which can be problematic later
        open(start)
        close(end)

# Sort all the interval-endpoints that we really need to look at
oset = {0:None, 200:None}
for k in opens.keys():
    oset[k] = None
for k in closes.keys():
    oset[k] = None
relevant_indices = sorted(oset.keys())

# Find the clear ranges
state = 0
results = []
for i in range(len(relevant_indices) - 1):
    start = relevant_indices[i]
    end = relevant_indices[i+1]

    start_state = state
    if start in opens:
        start_state += opens[start]
    if start in closes:
        start_state -= closes[start]

    end_state = start_state
    if end in opens:
        end_state += opens[end]
    if end in closes:
        end_state -= closes[end]
    state = end_state

    if start_state == 0:
        result_start = start
        result_end = end
        results.append((result_start, result_end))

for start, end in results:
    print(str(start) + " " + str(end))

Эти выходы :

0 1
8 9
12 20
30 200

Интервалы не нужно сортировать.

2
задан CKE 13 July 2018 в 04:41
поделиться

1 ответ

Вам нужно будет пометить оба ваши представления с помощью уникального имени перехода.

ViewCompat.setTransitionName(imageView, "some_unique_transitionName");

начать новую активность с помощью этой новой информации

ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, imageView, ViewCompat.getTransitionName(imageView));

activity.startActivity(intent, options.toBundle());

Теперь, в новом действии : В зависимости от того, как вы открываете свою следующую активность и насколько сложной является ее иерархия, вы могли бы хотеть использовать supportPostponeEnterTransition(); во время onCreate и supportStartPostponedEnterTransition(); когда-нибудь позже, когда она настроена. Я дам вам прочитать документацию для него

. Помимо этого найдите вид нового действия, которое необходимо анимировать, и установите для него имя перехода

activityImage.setTransitionName(transitionName);

и

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

 getWindow().getSharedElementEnterTransition().setDuration(200);
    getWindow().getSharedElementReturnTransition().setDuration(200)
            .setInterpolator(new DecelerateInterpolator());

И переходы входа / выхода для вашей деятельности (вы будете это нужно)

    Fade fade = new Fade();
    fade.excludeTarget(android.R.id.statusBarBackground, true);
    fade.excludeTarget(android.R.id.navigationBarBackground, true);
    getWindow().setEnterTransition(fade);
    getWindow().setExitTransition(fade);

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

0
ответ дан Sajal Gupta 17 August 2018 в 13:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: