[英]How to show 2 sections under android recyclerview swipe
我想在带有图标和文字的recyclerview滑动下显示2个部分。
这是我的代码
@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) {
View itemView = viewHolder.itemView;
float action_item_width = viewHolder.itemView.getWidth() / 5;
Paint p = new Paint();
if (dX > 0) {
Log.i("actionState", dX + " " + action_item_width);
dX = (dX-1 > action_item_width) ? action_item_width : dX;
p.setColor(getResources().getColor(R.color.colorAccent));
c.drawRect((float) itemView.getLeft(), (float) itemView.getTop(), dX,
(float) itemView.getBottom(), p);
} else {
dX = 0;
}
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}
它仅创建带有颜色的部分。 我需要添加一个图标和文本。
使用其他方法可能更容易实现您的需求。
您可以为回收者视图项目实现两个视图(前景和背景):
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/bg">
<android.support.constraint.ConstraintLayout
android:id="@+id/icon_text_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/bg1">
<!--icon and text layout (background)-->
</android.support.constraint.ConstraintLayout>
<android.support.constraint.ConstraintLayout
android:id="@+id/item_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/bg2">
<!--recyclerview item layout (foreground)-->
</android.support.constraint.ConstraintLayout>
</FrameLayout>
并在recyclerview的视图持有人中:
class MyViewHolder extends RecyclerView.ViewHolder {
private ConstraintLayout mItemLayout;
private ConstraintLayout mIconTextLayout;
MyViewHolder(View v) {
super(v);
mItemLayout = (ConstraintLayout) v.findViewById(R.id.item_layout);
mIconTextLayout = (ConstraintLayout) v.findViewById(R.id.icon_text_layout);
}
View getViewToSwipe() {
return mItemLayout;
}
}
最后,将带有以下回调的ItemToucHelper附加到recyclerview:
ItemTouchHelper.SimpleCallback mItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
// override methods
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
if (viewHolder instanceof MyViewHolder) {
int swipeFlags = ItemTouchHelper.RIGHT;
return makeMovementFlags(0, swipeFlags);
} else {
return 0;
}
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
RecyclerView.ViewHolder target) {
return false;
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
getDefaultUIUtil().clearView(((MyViewHolder) viewHolder)
.getViewToSwipe());
}
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
if (viewHolder != null) {
getDefaultUIUtil().onSelected(((MyViewHolder) viewHolder)
.getViewToSwipe());
}
}
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
float dX, float dY, int actionState, boolean isCurrentlyActive) {
getDefaultUIUtil().onDraw(c, recyclerView, ((MyViewHolder) viewHolder)
.getViewToSwipe(), dX, dY, actionState, isCurrentlyActive);
}
public void onChildDrawOver(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
float dX, float dY, int actionState, boolean isCurrentlyActive) {
getDefaultUIUtil().onDrawOver(c, recyclerView, ((MyViewHolder) viewHolder)
.getViewToSwipe(), dX, dY, actionState, isCurrentlyActive);
}
};
ItemTouchHelper mItemTouchHelper = new ItemTouchHelper(mItemTouchCallback);
使用这种方法,您将可以灵活地将任何内容放置在背景布局中,并可以根据需要使用带有文本视图的图标。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.