[英]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.