gpt4 book ai didi

android - 在不使用库的情况下滑动(滑动以关闭)时在 recyclerview 项目下创建按钮和按钮单击

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:53 24 4
gpt4 key购买 nike

我正在使用 RecyclerView 来显示我的列表。我使用 ItemTouchHelper 在 RecyclerView 上实现滑动以关闭。底层布局是在 OnchildDraw 方法中使用 Canvas 实现的。现在我有一个问题:我想在我的图标上设置 onclick。通过点击图标,我想做一些功能。这是我的类(class):

public class ItemTouchHelperCallback : ItemTouchHelper.SimpleCallback
{
private ContactSearchedResultAdapter _adapter;
private RecyclerView _mRecyclerView;
private int _swipeCount;
private Android.Content.Res.Resources _resources;
public ItemTouchHelperCallback(ContactSearchedResultAdapter adapter, RecyclerView mRecyclerView, Android.Content.Res.Resources resources)
: base(0, ItemTouchHelper.Left | ItemTouchHelper.Right)
{
this._adapter = adapter;
this._mRecyclerView = mRecyclerView;
this._resources = resources;
}
public override bool OnMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target)
{
return false;
}

public override void OnSwiped(RecyclerView.ViewHolder viewHolder, int direction)
{
if (direction == ItemTouchHelper.Left)
{
_adapter.RemoveViewWithDialog(viewHolder.AdapterPosition, _mRecyclerView, _swipeCount);
if (_swipeCount == 0)
_swipeCount++;
}
else
{
_adapter.SaveContactToDataBase(viewHolder.AdapterPosition, _mRecyclerView);
}
}
public override void OnChildDraw(Canvas cValue, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, bool isCurrentlyActive)
{
Paint paint = new Paint();
View itemView = viewHolder.ItemView;
float height = (float)itemView.Bottom - (float)itemView.Top;
float width = height / 3;
Bitmap icon;

if (dX > 0)
{
paint.Color = Color.ParseColor("#388E3C");
RectF background = new RectF((float)itemView.Left, (float)itemView.Top, dX, (float)itemView.Bottom);
cValue.DrawRect(background, paint);
icon = BitmapFactory.DecodeResource(_resources, Resource.Drawable.addoption);
RectF icon_dest = new RectF((float)itemView.Left + width, (float)itemView.Top + width, (float)itemView.Left + 2 * width, (float)itemView.Bottom - width);
cValue.DrawBitmap(icon, null, icon_dest, paint);
}
else
{
paint.Color = Color.ParseColor("#D32F2F");
RectF background = new RectF((float)itemView.Right + dX, (float)itemView.Top, (float)itemView.Right, (float)itemView.Bottom);
cValue.DrawRect(background, paint);
icon = BitmapFactory.DecodeResource(_resources, Resource.Drawable.removeoption);
RectF icon_dest = new RectF((float)itemView.Right - 2 * width, (float)itemView.Top + width, (float)itemView.Right - width, (float)itemView.Bottom - width);
cValue.DrawBitmap(icon, null, icon_dest, paint);
}

float alpha = (float)1.0- Math.Abs(dX)/(float) itemView.Width;
itemView.Alpha = alpha;
itemView.TranslationX = dX;

base.OnChildDraw(cValue, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}

}

如您所见,我在 OnSwiped 方法中调用了 ItemRemoving 或 ItemSaving。我现在想做的是在点击图标时调用这些方法(在 OnchildDraw 中由 Canvas 绘制的图标)我搜索了很多有关此主题的内容,但找不到不使用任何库就实现此功能的任何解决方案。我不想使用图书馆。

最佳答案

我遇到了和你一样的问题。我编码了半天,终于找到了一种方法。

首先,我认为这是android ItemTouchHelper 的问题,没有办法解决。

所以不能使用ItemTouchHelper等系统方法。

我的做法是:1. 设置 recylerView.setOnTouchListener 以在屏幕上获取 (x,y)。

  1. ItemTouchHelper onSwiped()时,设置状态,找到可点击区域。

  2. 检查您的触摸点是否碰到图标区域。

  3. 在您的 onTouch() 方法中点击时做一些事情。

您可以在我的 Github 存储库中找到我的解决方案。 https://github.com/TindleWei/WindGod

这里有 3 种使用 ItemTouchHelper 的方法:

  1. 像你一样的 android 正常方式

  2. 前景和背景区域方式

  3. viewpager方式

在我的 repo 上,您可以查看第二种方式。

关于android - 在不使用库的情况下滑动(滑动以关闭)时在 recyclerview 项目下创建按钮和按钮单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38811533/

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