这是我的第一个Android项目之一,所以请耐心等待一下。由于缺少更好的单词,我无法将onScroll()方法限制为一次迭代。正在发生的情况是,当我执行一个scrollX所在的滚动时,比如130,索引增加4而不是预期的1.我试图找到一种方法使索引每次刷卡事件增加1 ,无论距离X多大。我做了,if-else-if构造一直到240,增加40,但这似乎也不起作用。
以下是相关代码 - 我删除了GestureDetector.OnGestureListener的所有其他实现方法。
public class QuoteActivity extends ActionBarActivity implements
GestureDetector.OnGestureListener,GestureDetector.OnDoubleTapListener{
private GestureDetectorCompat detect;
private TextView textQuote;
private String[] quotes;
private int index = 0;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.quote_main);
textQuote = (TextView)findViewById(R.id.textView_quote);
quotes = getResources().getStringArray(ProcessQuote.getArray());
textQuote.setText(quotes[index]);
detect = new GestureDetectorCompat(this,this);
detect.setOnDoubleTapListener(this);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
detect.onTouchEvent(event);
return super.onTouchEvent(event);
}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if(distanceX > 40 && index < quotes.length-1){
index++;
textQuote.setText(quotes[index]);
}else if(distanceX < -40 && index > 0) {
index--;
textQuote.setText(quotes[index]);
}
return false;
}
答案 0 :(得分:1)
存储您的滚动偏移:
float scrollstartX1, scrollStartY1;
然后仅在滚动评估后运行动作,但仅限于坐标不同。
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if (scrollstartX1 != e1.getX() || scrollStartY1 != e1.getY()) {
scrollstartX1 = e1.getX();
scrollStartY1 = e1.getY();
//Code here should only execute once per scroll
}
}
答案 1 :(得分:0)
也许你想要onFling()而不是onScroll()......
@Override
public boolean onFling(MotionEvent event1, MotionEvent event2,
float velocityX, float velocityY) {
Log.d(DEBUG_TAG, "onFling: " + event1.toString()+event2.toString());
return true;
}