编辑:真正的问题是我的linearlayout
被包装在另一个布局中,这导致了不正确的行为。Sanvywell的公认答案比我在问题中提供的代码片段更好、更完整地说明了如何在滑动视图下绘制颜色。
现在RecyclerView小部件已经在ItemTouchHelper类的帮助下对行滑动提供了原生支持,我尝试在一个行的行为将与Google的Inbox应用程序类似的应用程序中使用它。也就是说,向左侧滑动执行一个动作,向右侧滑动执行另一个动作。
使用ItemTouchHelper.SimpleCallback的OnSwiped
方法很容易实现操作本身。然而,我无法找到一个简单的方法来设置颜色和图标,应该出现在当前正在刷的视图下(就像在谷歌的收件箱应用程序)。
为此,我尝试重写ItemTouchHelper.SimpleCallback的onChildDraw
方法,如下所示:
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder, float dX, float dY,
int actionState, boolean isCurrentlyActive) {
RecyclerViewAdapter.ViewHolder vh = (RecyclerViewAdapter.ViewHolder) viewHolder;
LinearLayout ll = vh.linearLayout;
Paint p = new Paint();
if(dX > 0) {
p.setARGB(255, 255, 0, 0);
} else {
p.setARGB(255, 0, 255, 0);
}
c.drawRect(ll.getLeft(), ll.getTop(), ll.getRight(), ll.getBottom(), p);
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
从dX确定滑动方向并设置适当的颜色可以按照预期工作,但我从ViewHolder
获得的坐标总是对应于第一个LinearLayout
充气的地方。
如何为当前划过的行中的linearlayout
获取正确的坐标?有没有更简单的方法(不需要重写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) {
// Get RecyclerView item from the ViewHolder
View itemView = viewHolder.itemView;
Paint p = new Paint();
if (dX > 0) {
/* Set your color for positive displacement */
// Draw Rect with varying right side, equal to displacement dX
c.drawRect((float) itemView.getLeft(), (float) itemView.getTop(), dX,
(float) itemView.getBottom(), p);
} else {
/* Set your color for negative displacement */
// Draw Rect with varying left side, equal to the item's right side plus negative displacement dX
c.drawRect((float) itemView.getRight() + dX, (float) itemView.getTop(),
(float) itemView.getRight(), (float) itemView.getBottom(), p);
}
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}
我有一个奇怪的问题,老实说,我不知道该怎么做。 我有一个背景图像的盒子。在背景图片上,我有很多带有背景颜色和文字的框。我希望每个框中的文本的颜色是透明的,所以颜色将是文本上面的背景图像的一部分。 这里有一个例子:http://jsfiddle.net/wjdwohdd/5/ 它应该是一个图像,而不是绿色背景。 如果我设置颜色:透明,文本的颜色变成红色,我不确定它是否可以作为背景图片。 编辑:我更新
我已经做了一些研究,我还没有找到一个示例或实现,允许您在滑动时将一个视图(下面的示例图像)放在RecyclerView下面。是否有人有任何例子或想法,如何实现这将不使用库。 下面是我如何实现扫瞄以解除职务。
当我移除Android:BackgroundTint标记时,错误就消失了。知道为什么会这样吗?
我的app里有一些这样的按钮: 我正在尝试创建一个带有文本和图标的按钮。Android:DrawableLeft对我不起作用(也许会,但我不知道如何设置图标的最大高度)。 所以我创建了一个包含ImageView和TextView的LinearLayout,并使其像一个按钮一样运行: 我的新按钮正是我想要的(字体大小,图标和文本放置)。但它看起来不像我的默认按钮: 所以我试着改变新按钮的背景和文本颜