我在布局中使用了滚动视图。当滚动事件发生时,我需要动画并在滚动结束时停止动画。无论如何,我可以检测滚动和滚动停止事件吗?
我检查了滚动视图,但它似乎没有提供这些事件。我需要使用手势探测器吗?
请帮忙。
感谢, 斯纳
我在布局中使用了滚动视图。当滚动事件发生时,我需要动画并在滚动结束时停止动画。无论如何,我可以检测滚动和滚动停止事件吗?
我检查了滚动视图,但它似乎没有提供这些事件。我需要使用手势探测器吗?
请帮忙。
感谢, 斯纳
这解决了我的问题! :)
svMovieDetails.setOnTouchListener(新View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_SCROLL:
case MotionEvent.ACTION_MOVE:
Log.e("SCROLL", "ACTION_SCROLL");
break;
case MotionEvent.ACTION_DOWN:
Log.e("SCROLL", "ACTION_DOWN");
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
Log.e("SCROLL", "SCROLL_STOP");
break;
}
return false;
}
});
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class OnSwipeTouchListener implements OnTouchListener {
private final GestureDetector gestureDetector;
public OnSwipeTouchListener (Context ctx){
gestureDetector = new GestureDetector(ctx, new GestureListener());
}
private final class GestureListener extends SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
boolean result = false;
try {
float diffY = e2.getY() - e1.getY();
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > Math.abs(diffY)) {
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight();
} else {
onSwipeLeft();
}
}
result = true;
}
else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
onSwipeBottom();
} else {
onSwipeTop();
}
}
result = true;
} catch (Exception exception) {
exception.printStackTrace();
}
return result;
}
}
public void onSwipeRight() {
}
public void onSwipeLeft() {
}
public void onSwipeTop() {
}
public void onSwipeBottom() {
}
}
可能是这一个帮助你,我从this讨论
让您可以扩展ScrollView
,并覆盖
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt)
得到滚动。要在活动/片段中获取此值,还可以定义听众
感谢。但如何得到它如果滚动正在发生或结束? – Neha 2014-09-30 14:18:51
我觉得你可以考虑滚动在空闲时'oldt == t'和'oldl == l'。如果发生,值会有所不同 – Blackbelt 2014-09-30 14:24:07