我正在使用 Recycler 视图处理浮动键盘,当单击按钮时会出现在屏幕上,并在完成向右/向左滑动时关闭。当我这样做时,我观察到滑动键盘并不顺畅(有时滑动监听器不会检测到滑动手势。)。然后我参考了以下链接并重新工作,
https://medium.com/@euryperez/android-pearls-detect-swipe-and-touch-over-a-view-203ae2c028dc
https://stackoverflow.com/questions/4139288/android-how-to-handle-right-to-left-swipe-gestures.
我在 Recycler 视图的子视图中添加了手势监听器,并使用了三个覆盖方法 onClick()、onSwipeRight() 和 onSwipeLeft()。onClick 的位置是完美获取的,但是有时候 Swipe Listeners 没有被检测到,这让用户感觉滑动不顺畅。
我所需要的只是使滑动更顺畅并检测点击键的位置,而不会影响两者。如果有任何方法建议我,有什么方法可以实现这些功能!这是我的代码。提前致谢 !。
public ViewHolder(View v) {
super(v);
textView = (TextView) v.findViewById(R.id.textView);
imageView = (ImageView) v.findViewById(R.id.imageView);
relativeLayout = (RelativeLayout) v.findViewById(R.id.relativeLayout);
mBodyContainer = (ConstraintLayout) v.findViewById(R.id.body_container);
cllayout = (RelativeLayout) v.findViewById(R.id.cllayout);
setSwipeGestureForParent(cllayout);
}
private void setSwipeGestureForParent(final View view) {
view.setOnTouchListener(new OnSwipeTouchListener(mContext) {
@Override
public boolean onTouch(View v, MotionEvent event) {
parentview.stopScroll();
String view = item.text;
if (view.equals("")) {
} else if (v.getId() != R.id.body_container && !view.equals("")) {
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
imageView.setBackground(ContextCompat.getDrawable(mContext, R.drawable.bg_keyboard_key_selected));
break;
case MotionEvent.ACTION_MOVE:
imageView.setBackground(ContextCompat.getDrawable(mContext, R.drawable.bg_keyboard_key_selected));
break;
case MotionEvent.ACTION_BUTTON_PRESS:
imageView.setBackground(ContextCompat.getDrawable(mContext, R.drawable.bg_keyboard_key_selected));
break;
default:
imageView.setBackground(ContextCompat.getDrawable(mContext, R.drawable.bg_keyboard_key_normal));
break;
}
}
return super.onTouch(v, event);
}
@Override
public void onClick() {
super.onClick();
Toast.makeText(mContext, "onclick", Toast.LENGTH_SHORT).show();
}
@Override
public void onSwipeLeft() {
Toast.makeText(mContext, "Swipeleft", Toast.LENGTH_SHORT).show();
}
@Override
public void onSwipeRight() {
Toast.makeText(mContext, "SwipeRight", Toast.LENGTH_SHORT).show();
}
});
}