jul*_*jul 56 android android-viewpager
我在a上设置了一个单击侦听器ViewPager,但是从不调用onClick事件.我猜触摸事件检测ViewPager是干扰,但我看不出如何解决它...
有人可以帮忙吗?
谢谢
mViewPager.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// never called
}
});
Run Code Online (Sandbox Code Playgroud)
Mar*_*ann 105
我通过使用GestureDetector解决了类似的问题
将MotionEvent发送到GestureDetector
tapGestureDetector = new GestureDetector(this, new TapGestureListener());
viewPager.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
tapGestureDetector.onTouchEvent(event);
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
您正在使用兼容性库,您可以将第一行更改为:
tapGestureDetector = new GestureDetectorCompat(this, new TapGestureListener());
Run Code Online (Sandbox Code Playgroud)
您可以在GestureListener中处理您的事件:
class TapGestureListener extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// Your Code here
}
}
Run Code Online (Sandbox Code Playgroud)
Kal*_*esh 21
我这样做了......
mViewPager.setOnTouchListener(new View.OnTouchListener() {
float oldX = 0, newX = 0, sens = 5;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
oldX = event.getX();
break;
case MotionEvent.ACTION_UP:
newX = event.getX();
if (Math.abs(oldX - newX) < sens) {
itemClicked(mViewPager.getCurrentItem());
return true;
}
oldX = 0;
newX = 0;
break;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
bhe*_*man 20
事实上,观察者正在干涉.但是你可以覆盖viewpager的方法,使它做你想做的.您需要覆盖ViewGroup.onInterceptTouchEvent(MotionEvent ev)方法.
您可以随时返回false以允许触摸事件通过.我还建议调用super.onInterceptTouchEvent(ev)以允许滑动继续工作.
它传入MotionEvent,因此您可以根据需要检查点击次数.
希望有所帮助.它应该至少让你开始.回复问题或进一步的问题.
编辑:
另请注意,ViewPager不会消耗点击次数.因此,如果您想捕获点击次数并可能为自己节省大量工作,您可以轻松地在viewpager的任何或所有子项上设置onclicklistener.
小智 5
我知道这是一个古老的话题,但我认为这是一个更容易的解决方案.
ViewPager viewPager = new ViewPager(this);
viewPager.setAdapter(yourPagerAdapter);
// somewhere where you setup your viewPager add this
viewPager.setOnTouchListener(
new View.OnTouchListener() {
private boolean moved;
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
moved = false;
}
if (motionEvent.getAction() == MotionEvent.ACTION_MOVE) {
moved = true;
}
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
if (!moved) {
view.performClick();
}
}
return false;
}
}
);
// then you can simply use the standard onClickListener ...
viewPager.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i(LOG, "Dayum!");
}
}
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48364 次 |
| 最近记录: |