简体   繁体   English

Android Studio onTouchListener 不适用于 Viewpager

[英]Android Studio onTouchListener not working on Viewpager

my ontouchlistener is not working.我的 ontouchlistener 不工作。 I try to put it on a viewpager to count basicly all touches the user does.我试着把它放在一个 viewpager 上,以计算用户所做的基本上所有的触摸。

in my onCreate method:在我的 onCreate 方法中:

   mViewPager.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch(event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        Log.d("TOUCH ON TAB", "TOUCH DETECTED");

                        if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_DOWN) {
                            touchCounter++;
                        }

                        if(touchCounter >= 5) {
                            // you have done 5 touches
                            ShowCounter();
                            touchCounter = 0;
                        }
                        break;
                }
                return true;
            }
        });

But Log.d("TOUCH ON TAB", "TOUCH DETECTED");但是Log.d("TOUCH ON TAB", "TOUCH DETECTED"); is not found in the console.在控制台中找不到。 Also my counter is not working.我的计数器也不起作用。

The Viewpager looks like this: Viewpager 看起来像这样:


   <android.support.v4.view.ViewPager
                    android:id="@+id/container"
                    android:clickable="true"
                    android:focusable="true"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_above="@+id/adView"
                    android:layout_marginBottom="2dp">
                </android.support.v4.view.ViewPager>

Most probably your problem is not on the OnTouchListener , I faced issues when I use spaces in the log tag when trying to log messages;很可能您的问题不在OnTouchListener ,我在尝试记录消息时在日志标记中使用空格时遇到了问题; they won't give you errors or warning, and if you don't filter out results in logcat and see the entire debug message, actually you'll find them there;他们不会给你错误或警告,如果你不过滤掉 logcat 中的结果并查看整个调试消息,实际上你会在那里找到它们; but for some reason they can't be filtered right using the logcat filtering.但由于某种原因,它们无法使用 logcat 过滤进行过滤。

So try to change below log所以尝试更改以下日志

Log.d("TOUCH ON TAB", "TOUCH DETECTED");

Into something without spaces or special characters变成没有空格或特殊字符的东西

Log.d("TOUCH_ON_TAB", "TOUCH DETECTED");

hope this helps希望这可以帮助

You need to create your custom class which extends ViewPager:您需要创建扩展 ViewPager 的自定义类:

public class ViewPagerExample extends ViewPager {

private boolean enabled;
private ViewPagerAdapter adapter;

public ViewPagerExample(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.enabled = true;
    changePagerScroller();
}

@Override
public void setAdapter(@Nullable PagerAdapter adapter) {
    super.setAdapter(adapter);
    this.adapter = (ViewPagerAdapter) adapter;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (this.enabled) {
        return super.onTouchEvent(event);
    }

    return false;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    if (this.enabled) {
        return super.onInterceptTouchEvent(event);
    }

    return false;
}


public void setPagingEnabled(boolean enabled) {
    this.enabled = enabled;
}


private void changePagerScroller() {
    try {
        Field mScroller = null;
        mScroller = ViewPager.class.getDeclaredField("mScroller");
        mScroller.setAccessible(true);
        ViewPagerScroller scroller = new ViewPagerScroller(this.getContext());
        mScroller.set(this, scroller);
    } catch (Exception e) {
        Log.e(this.getClass().getSimpleName(), "error of change scroller ", e);
    }
}

private class ViewPagerScroller extends Scroller {

    private int mScrollDuration = 1000;

    ViewPagerScroller(Context context) {
        super(context);
    }

    @Override
    public void startScroll(int startX, int startY, int dx, int dy, int duration) {
        super.startScroll(startX, startY, dx, dy, mScrollDuration);
    }
    @Override
    public void startScroll(int startX, int startY, int dx, int dy) {
        super.startScroll(startX, startY, dx, dy, mScrollDuration);
    }


}

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM