我正在使用活动之间的共享元素转换。第一项活动包含LinearLayout
和RecyclerView
:
第二项活动:
这是我的代码,看起来非常简单:
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) getContext(), pairs);
ActivityCompat.startActivity(getContext(), new Intent(Intent.ACTION_VIEW, scheme), options.toBundle());
在一般情况下,一切似乎都没问题,过渡动画效果很好。但是如果我在第一个活动中的RecyclerView
滚动时开始下一个活动,那么回到第一个活动,会发生一些可怕的事情:
我还测试了ListView
和ViewPager
,ListView
有同样的问题而ViewPager
没有。如果我在startActivity
之前停止滚动,一切都会好的。
然而,在我的产品环境中,视图很复杂,找到所有ListView
和RecyclerView
并停止滚动是很难看的。除了在startActivity
之前停止滚动之外,还有其他方法可以防止它发生吗?
答案 0 :(得分:0)
RecyclerView类没有这种方法来禁用滚动。像下面一样自己创建CustomRecyclerView。
public class FooRecyclerView extends RecyclerView {
private boolean verticleScrollingEnabled = true;
public void enableVersticleScroll (boolean enabled) {
verticleScrollingEnabled = enabled;
}
public boolean isVerticleScrollingEnabled() {
return verticleScrollingEnabled;
}
@Override
public int computeVerticalScrollRange() {
if (isVerticleScrollingEnabled())
return super.computeVerticalScrollRange();
return 0;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
if(isVerticleScrollingEnabled())
return super.onInterceptTouchEvent(e);
return false;
}
public FooRecyclerView(Context context) {
super(context);
}
public FooRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public FooRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
}
将RecyclerView替换为上面创建的自定义视图,
<com.customGoogleViews.FooRecyclerView
android:id="@+id/task_sub_list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
在开始新活动之前禁用滚动,
recyclerview.enableVersticleScroll(false);
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) getContext(), pairs);
ActivityCompat.startActivity(getContext(), new Intent(Intent.ACTION_VIEW, scheme), options.toBundle());
希望有所帮助:)