ActivityOptions.makeSceneTransitionAnimation не работает в первый раз - PullRequest
0 голосов
/ 03 июня 2018

Я хочу сделать переход, когда пользователь нажимает на ImageView в элементе адаптера с RecyclerView.

. Анимация работает после первого щелчка, но не в первый раз, когдапользователь нажимает View.

После первого щелчка, он отлично работает с тем же ImageView.Но если я нажимаю другое изображение из другого элемента RecyclerView, первый раз тоже не работает.

Это код внутри адаптера:

holder.ivCommentItemAttachment.setOnClickListener { v ->
    val intent = Intent(context, ImageActivity::class.java)
    intent.putExtra(ImageActivity.EXTRA_IMAGE_URL, imageAttachmentUrl)
    val transitionName = ImageActivity.TRANSITION_IMAGE
    v.transitionName = transitionName
    val options = ActivityOptions.makeSceneTransitionAnimation(context, v, transitionName)
    context.startActivity(intent, options.toBundle())
}

И действия сизображение:

class ImageActivity : AppCompatActivity() {

    companion object {
        const val EXTRA_IMAGE_URL = "image"
        const val TRANSITION_IMAGE = "transitionImage"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_image)
        ivImage.transitionName = TRANSITION_IMAGE
        loadCover(this, intent.getStringExtra(EXTRA_IMAGE_URL), ivImage)
        ivImage.setOnClickListener { finishAfterTransition() }
    }
}

1 Ответ

0 голосов
/ 03 июня 2018

Просто примечание, обязательно удалите все android:transitionName из XML.

Я считаю, что причина вашей проблемы в том, что вы установили имя перехода в onClick.Вот почему при первом щелчке переход не работает, поскольку имя не задано, а при втором щелчке имя уже задано (при первом щелчке ) поэтому переход работает.Решением будет перемещение именования переходов с setOnClickListener на onBindViewHolder, чтобы имя перехода устанавливалось до щелчка.

РЕДАКТИРОВАТЬ:

Если нетпо вышеуказанной причине или из-за путаницы в именах переходов это может быть связано с готовностью ImageView s, когда происходит переход, в этом случае вам нужно отложить переход до тех пор, пока представления не будут готовы.

Попробуйте в своем ImageActivity in onCreate позвонить supportPostponeEnterTransition() (потому что я полагаю, что вы используете вспомогательную версию библиотеки Transition), а когда вы загружаете свое изображение в ImageView, загрузите егокогда он будет готовЭтого легче достичь, используя Picasso или любую другую подобную библиотеку, поэтому ваша ImageActivity s onCreate будет выглядеть примерно так:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_image);
    supportPostponeEnterTransition();

    // inflate you views
    // get your image URL

    Picasso.with(this)
            .load(imageUrl)
            .noFade()
            .into(imageView, new Callback() {
                @Override
                public void onSuccess() {
                    supportStartPostponedEnterTransition();
                }

                @Override
                public void onError() {
                    supportStartPostponedEnterTransition();
                }
            });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...