【问题标题】:ViewPager Swipe with Button OnTouchListener event使用按钮 OnTouchListener 事件的 ViewPager 滑动
【发布时间】:2013-11-23 07:21:43
【问题描述】:

我有一个 ViewPager ,其中包含 2 个项目,还有一个 Button 用于 ViewPager Animation 。我想用 Button 的 TouchEvent 滑动 ViewPager 而不向上移动手指,即从 Button 滑动手指并获得 ViewPager Swipe

目前我只能在我向上移动手指而不在TouchEvent上滑动时才能获得滑动

下面是我的 XML 代码片段

<Button
    android:id="@+id/slide_btn_speak"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:background="@android:drawable/ic_btn_speak_now"
    android:contentDescription="@string/app_name" />

<TextView
    android:id="@+id/slide_txtView_inside"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_marginLeft="20dp"
    android:layout_toRightOf="@+id/slide_btn_speak"
    android:text="@string/app_name" />

<android.support.v4.view.ViewPager
    android:id="@+id/ui_pager"
    android:layout_width="wrap_content"
    android:layout_height="150dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/slide_btn_speak"
    android:layout_toRightOf="@+id/slide_btn_speak"
    android:scrollbars="horizontal" >

</android.support.v4.view.ViewPager>

<Button
    android:id="@+id/slide_btn_drag"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:background="@android:drawable/ic_btn_speak_now"
    android:contentDescription="@string/app_name" />

我的活动片段...

public class SlidingActitvity extends Activity {

    ViewPager viewPager;

    Button slide_button_start ; 

    Vibrator vibrator;

    static int count ;

    int x_position, y_position;

    String hint[] ={" SWIPE TO CANCEL " , ""};
    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_sliding_actitvity);

        viewPager = (ViewPager) findViewById(R.id.ui_pager);

        vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

        slide_button_start = (Button) findViewById(R.id.slide_btn_drag);



        slide_button_start.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {


                switch (event.getAction()) {

                case MotionEvent.ACTION_MOVE:

                    int viewPager_width = viewPager.getWidth();

                    x_position = (int) event.getX();
                    y_position = (int) event.getY();
                    if(x_position<= 0){

                        vibrator.cancel();
                        viewPager.bringToFront();

                        logIt("Touch..." +x_position +"..."+y_position);
                    }

                    break;

                case MotionEvent.ACTION_DOWN:

                    vibrator.vibrate(100);

                    final Animation animation = AnimationUtils.loadAnimation(SlidingActitvity.this, R.anim.left);

                    ViewPagerAdapter adapter = new ViewPagerAdapter(SlidingActitvity.this , hint);

                    viewPager.setAdapter(adapter);

                    viewPager.setVisibility(ViewPager.VISIBLE);

                    viewPager.setAnimation(animation);


                    logIt("Touch...Down");

                    break;

                case MotionEvent.ACTION_UP:

                     logIt("Touch...Up");
                     vibrator.cancel();

                     break;
                case MotionEvent.ACTION_OUTSIDE:
                    logIt("Your are out...");
                    vibrator.cancel();
                break ;
                default:
                    break;
                }

                return true;
            }
        });

    }

感谢任何答案...

【问题讨论】:

  • 在按钮点击事件上使用方法 viewPager.setCurrentItem() 方法
  • @BirajZalavadia 我想在不抬起手指的情况下从 Button 移动到 ViewPager 时滑动 Viewpager……但我没有在 Button 上的 TouchEvent 上滑动

标签: android android-layout android-viewpager


【解决方案1】:

通过在按钮的 OnTouchListener 中返回 true,you're consuming the touch event。具体来说,ViewPager 需要被告知MotionEvent.ACTION_DOWN,这样它才能在检测到它被滑动时拦截触摸事件。

您需要仔细考虑在哪些情况下触摸事件会向上传递到视图层次结构,以便 ViewPager 可以继续发挥其魔力。

【讨论】:

  • 即使我向 OnTouchListener 返回 false 并仅对我需要处理的事件返回 true 当我将手指从 Button 移动到 ViewPager 时,它根本没有检测到 ViewPager 滑动
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 2015-04-02
  • 1970-01-01
相关资源
最近更新 更多