获取视图的触摸侦听器并在另一个视图上调用触摸事件

Posted

技术标签:

【中文标题】获取视图的触摸侦听器并在另一个视图上调用触摸事件【英文标题】:Take the touch listener of an view and call an touch event on another view 【发布时间】:2016-03-08 16:04:19 【问题描述】:

我有一个带有这个监听器的 viewpager。

pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() 
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) 
            Float translation = position * viewpagerWidth *Constants.density;
            if(positionOffset != 0)
                image.setTranslationX(- translation -(positionOffsetPixels * Constants.density)/12);
        

        @Override
        public void onPageSelected(int position) 
            page = position;
            mButtons.updateViewIntro(position + 1);
            switch (position)
                case 0:
                    title.setText(getString(R.string.passenger_name));
                    subtitle.setText(getString(R.string.intro_passenger_subtitle));
                    new FadeOutAnimation(arrowleft).animate();
                    break;
                case 1:
                    title.setText(getString(R.string.intro_mileage));
                    subtitle.setText(getString(R.string.intro_mileage_subtitle));
                    if(arrowleft.getVisibility() == View.GONE || arrowleft.getVisibility() == View.INVISIBLE)
                        new FadeInAnimation(arrowleft).animate();
                    if(arrowright.getVisibility() == View.GONE || arrowright.getVisibility() == View.INVISIBLE)
                        new FadeInAnimation(arrowright).animate();
                    break;
                case 2:
                    title.setText(getString(R.string.intro_analytics));
                    subtitle.setText(getString(R.string.intro_analytics_subtitle));
                    new FadeOutAnimation(arrowright).animate();
                    break;
            
        

        @Override
        public void onPageScrollStateChanged(int state) 

        
    );

我的问题是:如果我在底部有另一个视图,那绝不会连接到这个 viewpager。是否可以在其上设置一个触摸侦听器,并使其也将调用 viewpager 的 onPageChangeListener? 如,我希望能够通过按下另一个对象来滚动查看器。 (我也需要在图片上添加)

【问题讨论】:

【参考方案1】:

是的,只需为您的视图设置一个触摸侦听器,然后在寻呼机上调用 setCurrentItem。

private final View.OnClickListener mListener = new View.OnClickListener() 
    public void onClick(View view) 
        mPager.setCurrentItem(<page number here>);
    

编辑:根据您的评论,试试这个:

yourView.setOnTouchListener(new View.OnTouchListener() 
    @Override
    public boolean onTouch(View v, MotionEvent event) 
        return mPager.onTouchEvent(event);
    
);

【讨论】:

不是我需要的。一个例子:你知道什么时候你不改变 viewpager 页面,但你只是将 viewpager 滚动到一半。然后你在监听器中获得 ScrollOffset 像素等...我想触摸另一个视图,它在下面,并且在该视图的触摸事件中,它将它传递给 viewpager,以便调用 onPageChanged 监听器,我从中得到 ScrollOffset 像素。基本上,如果我从底部滑动视图,我会看到 viewpager 是如何移动的...... 我不明白您为什么要这样做,通过在单独的视图上拖动手指来滚动视图似乎不直观(用户应该如何学习?)。但是,您可以通过为您的视图定义一个触摸侦听器来实现它,然后使用视图中的事件调用 mPager.onTouch(event)。 谢谢。现在将尝试。好。我在页面中间有一个viewpager。我有一个比屏幕大的背景,它是我翻译的图像视图,产生视差效果。这在我滚动查看器时有效。但是,当我按下背景视差图像时,我的老板也希望它能够工作......所以是的。

以上是关于获取视图的触摸侦听器并在另一个视图上调用触摸事件的主要内容,如果未能解决你的问题,请参考以下文章

如何避免 Touches 取消事件?

Android:将手势事件传递给另一个视图

在应用程序中侦听背景中的触摸事件

Android:WebView 触摸事件监听器

防止多点触控的 UIButton 触摸事件

swift--触摸(UITouch)事件(点击,移动,抬起)