RecyclerView
에 채워진 품목 (ImageView
, 2x TextView
)이 있습니다. 항목을 클릭하면 새로운 Activity
이 시작됩니다. Material transition을 사용하고 싶습니다. ImageView
을 다시 배열하고 싶습니다.Recycler Item 재료 전이가 올바르게 작동하지 않습니다.
모두 ImageViews
은 동일한 전환 이름을 공유합니다.
문제 :이 항목을 누르면는, 애니메이션 작품과 새로운 활동이 전환 시작,하지만 난 1 항목 아래에있는 항목 을 클릭하면, 전환이 아직 시작하고 처음에 종료됩니다 행.
@Override
public void openUserDetails(UiBaseUser data, View view, int position) {
iwAvatar = ButterKnife.findById(this, R.id.iw_avatar);
Pair<View, String> p1 = Pair.create(iwAvatar, "avatar");
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat
.makeSceneTransitionAnimation(this, p1);
startActivity(UserDetailActivity.getIntent(getApplicationContext(), data), optionsCompat.toBundle());
}
위의 코드는 SourceActivity
에서 실행되고 item_list
XML
레이아웃에 대한 직접 링크를 가지고 있지 않습니다. 그래서 Butterknife
을 사용하여 애니메이션하려는 ImageView
을 찾습니다. 그러나 이것은 실제로 눌러 진 ImageView
이 아닌 첫 번째 요소 인 ImageView
을 잡는 것처럼 보입니다.
여기 내 adapter class
입니다. 여기에 뭔가 빠져 있다고 가정합니다. 이 ViewHolder 클래스에서 나는 ImageView
이있는 UserListLayout
(item_list
) 레이아웃에 대한 참조를 가지고 있습니다.
public class UsersAdapter extends BaseAdapter<UiBaseUser, UsersAdapter.UserVH> {
private final LayoutInflater layoutInflater;
public UsersAdapter(Context context) {
this.layoutInflater = LayoutInflater.from(context);
}
@Override
public UserVH onCreateViewHolder(ViewGroup parent, int viewType) {
return new UserVH(layoutInflater.inflate(R.layout.item_users, parent, false));
}
@Override
public void onBindViewHolder(UsersAdapter.UserVH holder, int position) {
ViewCompat.setTransitionName(holder.layout.getIwAvatar(), "image_view_" + position);
holder.onBind(getItem(position));
}
public class UserVH extends RecyclerView.ViewHolder {
private UserListLayout layout;
public UserVH(View itemView) {
super(itemView);
layout = (UserListLayout) itemView;
}
public void onBind(UiBaseUser item) {
layout.bind(item);
}
}
}
는 TargetActivity 내가 간단하게 뭔가를 놓친 거지 같은 느낌
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_detail);
ButterKnife.bind(this);
initializeDagger();
bundle = getIntent().getExtras();
if (bundle != null) {
transitionName = bundle.getString(EXTRA_TRANSITION_NAME);
presenter.onCreate(baseData);
} else {
throw new IllegalStateException("Initial bundle in UserDetail Activity is null");
}
iwAvatar.setTransitionName(transitionName);
}
니펫을 -하지만 내 뇌가 충분히 소진 코딩의 연속 시간, 그것을 통해 볼 수 있습니다. 제발 도와주세요.
목록 항목의 전환 이름은 변경되지만 대상 '활동'보기에 대해 동일한 항목을 표시하는 샘플은 없습니다. –
Bundle을 통해 전환 이름을 설정하는 방법을 보여주기 위해 create snippet에 target 활동을 추가했습니다. 나는 사람들이 보통 더 긴 포스트를 무시하기 때문에, 여기에 모든 코드를 넣고 싶지 않았다. –
'transitionName'이 타겟'Activity'의 정확한 위치 인덱스를 가진 기대 값을 포함하는지 확인 했습니까 ('UserDetailActivity'라고 생각합니다)? –