gpt4 book ai didi

android - onChildDraw 使项目闪烁

转载 作者:行者123 更新时间:2023-11-29 01:15:06 25 4
gpt4 key购买 nike

我正在尝试创建一个可以滑动以关闭但可以撤消的 View 。这些项目在 FrameView 中有一个背景和一个前景。我正在重写 ItemTouchHelper.Callback 中的 onChildDraw,如下所示:

@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
float dX, float dY, int actionState, boolean isCurrentlyActive) {
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
if (viewHolder instanceof ItemViewHolder) {
ItemViewHolder holder = (ItemViewHolder) viewHolder;

holder.foreground.setTranslationX(dX);
}
} else {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}

一切正常,直到我尝试根据这样的用户操作撤消滑动操作:

foreground.animate()
.translationX(0)
.setDuration(150);

这确实将实际 View 带回了它的位置,但如果用户再次尝试滑动该项目,背景将再次显示,并且由于某种原因调用 onChildDraw 时 dX 参数大于屏幕宽度。点击该项目会在一瞬间显示背景 View ,然后通常可以关闭前景。我该如何解决这个问题?

最佳答案

解决方案是使用 ItemTouchHelper.CallbackgetDefaultUIUtil() 函数。工作代码如下:

@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
float dX, float dY, int actionState, boolean isCurrentlyActive) {
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
if (viewHolder instanceof TrackerListAdapter.ItemViewHolder) {
TrackerListAdapter.ItemViewHolder holder =
(TrackerListAdapter.ItemViewHolder) viewHolder;

getDefaultUIUtil().onDraw(c, recyclerView, holder.foreground, dX, dY, actionState, isCurrentlyActive);
}
} else {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}

关于android - onChildDraw 使项目闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40310894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com