我希望在用户点击具有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() }
}
}
答案 0 :(得分:1)
请注意,请务必从XML中删除任何android:transitionName
。
我认为您遇到问题的原因是您在onClick
中设置了转换名称。这就是为什么在第一次点击时转换不起作用,因为未设置名称,并且在第二次点击上已经设置了名称(来自首次点击)因此过渡有效。解决方案是将转换命名从setOnClickListener
移至onBindViewHolder
,以便在点击发生之前设置转换名称。
修改强>
如果不是出于上述原因或过渡名称混淆,那么可能是由于转换发生时ImageView
的准备就绪,在这种情况下,您需要推迟转换,直到视图准备就绪。
尝试ImageActivity
onCreate
中的supportPostponeEnterTransition()
来呼叫ImageView
(因为我认为您使用的是转型库的支持版本),以及将图像加载到ImageActivity
时1}}当它准备好时加载它。使用 Picasso 或任何其他类似的库时更容易实现,因此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();
}
});
}
看起来像这样:
call plug#begin('~/.vim/plugged')