【发布时间】:2017-04-23 07:55:31
【问题描述】:
我正在尝试移动和增长 RecyclerView,以便内容基于触摸输入占据全屏。我希望 RecyclerView 保持左右滚动的能力。
我无法让 GestureDetector 与 RecyclerView 一起正常工作。捕捉 onScrollChange 不起作用,因为它可能无法滚动。我尝试 onTouchEvent 但结果相当错误。有人有什么建议吗?
回购:https://github.com/CubanAzcuy/Animation-Test
mListView.setOnTouchListener(new View.OnTouchListener() {
Float mHistoricX = null;
Float mHistoricY = null;
Float mHistoricX2 = null;
Float mHistoricY2 = null;
int mScrollDirection = 0;
//1 = Left Right
//2 = Up Down
@Override
public boolean onTouch(View v, MotionEvent e) {
Log.d("TAG", "eX: " + e.getX() + " eY: " + e.getY());
switch (e.getAction()) {
case MotionEvent.ACTION_UP:
Log.d("TAG", "ACTION_UP");
mHistoricX = null;
mHistoricY = null;
mScrollDirection = 0;
break;
case MotionEvent.ACTION_MOVE:
Log.d("TAG", "ACTION_MOVE");
if(mHistoricX == null || mHistoricY == null) {
mHistoricX = e.getX();
mHistoricY = e.getY();
} else {
if(mScrollDirection == 0) {
float tempX = Math.abs(mHistoricX - e.getX());
float tempy = Math.abs(mHistoricY - e.getY());
if(tempX >= tempy) {
mScrollDirection = 1;
} else {
mScrollDirection = 2;
}
mHistoricX2 = mHistoricX - e.getX();
mHistoricY2 = mHistoricY - e.getY();
} else {
mHistoricX2 = mHistoricX - e.getX();
mHistoricY2 = mHistoricY - e.getY();
Log.d("TAG", "X: " + mHistoricX2 + " Y: " + mHistoricY2);
mHistoricX = e.getX();
mHistoricY = e.getY();
}
}
break;
default:
break;
}
if(mScrollDirection == 2){
mListView.animate().setDuration(0).xBy(-mHistoricX2).yBy(-mHistoricY2);
return true;
}
return false;
}
});
【问题讨论】:
标签: android android-recyclerview android-animation