我正在使用Custom Adapter for RecyclerView,并且在单击它们时需要展开它们。我遵循this使用Google推荐的方法来实现它。扩展工作正常,但是使用TransitionManager.beginDelayedTransition(recyclerView);
的动画并不是我想要的。当我在动画过程中尝试滚动RecyclerView时,也会发生一些奇怪的事情。
因此,我上线寻找动画扩展的不同方法。我发现了:
final ChangeBounds transition = new ChangeBounds();
transition.setDuration(100L);
TransitionManager.beginDelayedTransition(mRecyclerView,transition);
效果非常好,因为它可以为扩展项的行设置动画,然后显示View.GONE
视图。不涉及alpha转换等。但是后来我不得不将RecyclerView的layout_height
从match_parent
更改为match_constraint
,因为软键盘通常会隐藏展开的行(用户可以编辑项目,并且键盘弹出窗口)。
现在会发生什么::当我单击以展开RecyclerView的项目时,它会在很短的时间内自行展开,然后返回到正常状态,然后开始动画。它制作的动画确实很奇怪,很糟糕,并且破坏了平滑度。在将RecyclerView的layout_height
设置为match_parent
之前,并没有这样做,但是现在,在match_constraint
中,它是这样做的。
我正在使用代码对其进行扩展。在上面链接的文章之后。
final boolean isExpanded = position==mExpandedPosition;
// Hidden Views
holder.view1.setVisibility(isExpanded?View.VISIBLE:View.GONE);
holder.view2.setVisibility(isExpanded?View.VISIBLE:View.GONE);
holder.view3.setVisibility(isExpanded?View.VISIBLE:View.GONE);
holder.itemView.setActivated(isExpanded);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mExpandedPosition = isExpanded? -1:holder.getAdapterPosition();
// Animace
final ChangeBounds transition = new ChangeBounds();
transition.setDuration(100L);
TransitionManager.beginDelayedTransition(mRecyclerView,transition);
// Hiding keyboard if it's up
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
notifyDataSetChanged();
}
});
我做对的事情对吗?我可能缺少一些基本知识。我是Android开发的新手。谢谢!
答案 0 :(得分:0)
我找到了解决方案,也许有人会面临与我相同的问题。
这真是愚蠢的错误。我将from ctypes import *
so = cdll.LoadLibrary(...)
so.foo.argtypes = [
...
POINTER(POINTER(c_char)), # ParNameList
...
]
so.foo.restype = c_int
#...
ParNameList = POINTER(c_char)()
so.foo(..., ParNameList ,...)
设置为(char (*)[MAX_PARAM_NAME])
,但没有将layout_height
设置为
那么简单:将match_constraint
设置为layout_width
也可以解决问题。