Android中的触摸或单击事件ViewPagerIndicator

Posted

技术标签:

【中文标题】Android中的触摸或单击事件ViewPagerIndicator【英文标题】:Touch or Click event ViewPagerIndicator in Android 【发布时间】:2014-04-09 11:42:40 【问题描述】:

可能与以下内容重复:

    Intercepting touch events in ViewPagerIndicator Disabling & Enabling Paging In ViewPager in android android: ViewPager and HorizontalScrollVIew

我在我的 android 应用程序中使用ViewPagerIndicator 来滑动动态数量的视图并且它工作正常。

想要什么?当用户点击其中一张幻灯片时,其对应的视图将打开。但我无法覆盖 Pager 上的触摸事件。

活动代码是:

public class MainActivity extends BaseSampleActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mAdapter = new TestFragmentAdapter(getSupportFragmentManager());

        mPager = (ViewPager)findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);

        mPager.setOnTouchListener(new View.OnTouchListener() 

            @Override
            public boolean onTouch(View v, MotionEvent event) 
                // TODO Auto-generated method stub
                System.out.print(event.getAction());//not working

                return false;
            
        );

        mIndicator = (CirclePageIndicator)findViewById(R.id.indicator);
        mIndicator.setViewPager(mPager);
    

我搜索了很多,但没有找到合适的解决方案。 但没有得到正确而简短的答案

【问题讨论】:

【参考方案1】:

我也有同样的问题。首先我创建了一个CustomViewPager,它扩展了ViewPager

并覆盖 onTouchonInterceptTouch 事件:

    public class CustomViewPager extends ViewPager 


        public CustomViewPager(Context context, AttributeSet attrs) 
            super(context, attrs);
           

        @Override
        public boolean onInterceptTouchEvent(MotionEvent event) 

            return super.onInterceptTouchEvent(event);
        

        @Override
        public boolean onTouchEvent(MotionEvent event)
            return super.onTountEvent(event);
        

    

你的 xml 应该是:

    <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_
            android:layout_
            android:layout_weight="7" />

改成

    <com.yourpackage.CustomViewPager
            android:id="@+id/pager"
            android:layout_
            android:layout_
            android:layout_weight="7" />

点击事件使用GestureDetector。将MotionEvent 发送到tapGestureDetector。

tapGestureDetector = new GestureDetector(this, new TapGestureListener());

    viewPager.setOnTouchListener(new OnTouchListener() 
            public boolean onTouch(View v, MotionEvent event) 
                tapGestureDetector.onTouchEvent(event);
                return false;
            
    );

如果你使用的是兼容性库,可以将第一行改为:

tapGestureDetector = new GestureDetectorCompat(this, new TapGestureListener());

您可以在 GestureListener 中处理您的事件:

class TapGestureListener extends GestureDetector.SimpleOnGestureListener

     @Override
     public boolean onSingleTapConfirmed(MotionEvent e) 
       // Your Code here
     

【讨论】:

以上是关于Android中的触摸或单击事件ViewPagerIndicator的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中的多个视图上同时处理触摸事件

ViewPager里面的TextView拦截触摸事件

Android webview:防止将触摸手势传递给父viewpager

Android触摸事件-TouchEventHelper

单击事件与触摸事件的区别

使用 ViewPager + NestedScrollView + RecyclerView 时的触摸事件拦截