Android——ViewPager和内部view之间的事件分发及轮播图

本文详细探讨了Android中ViewPager在滑动过程中如何处理内部View的事件分发,通过示例代码展示了点击和滑动时的事件流向。在内部View的OnTouchListener返回true的情况下,滑动距离未达到阀值时事件作用于内部View,超过阀值则触发ACTION_CANCEL,事件转交给ViewPager。同时,文章提到了在实现轮播图时遇到的问题——手动滑动后自动轮播停止,并提出了相应的解决方案。
摘要由CSDN通过智能技术生成

viewpager 在滑动的过程中是如何触发view身上的事件的,换句话说,viewpager在滑动的过程中到底是滑动的它里面的view,还是滑动的viewpager本身?

一、示例代码:

1、自定义ViewPager:MyViewPager,重新dispatchTouchEvent方法,添加一些事件处理的log信息。

package com.example.viewpagerdemo;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;

public class MyViewPager extends ViewPager {
   

    private String TAG = "viewpagertest";

    public MyViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            Log.i(TAG , "===MyViewPager MotionEvent.ACTION_DOWN===");
            break;
        case MotionEvent.ACTION_MOVE:
            Log.i(TAG , "===MyViewPager MotionEvent.ACTION_MOVE===");
            break;
        case MotionEvent.ACTION_UP:
            Log.i(TAG , "===MyViewPager MotionEvent.ACTION_UP===");
            break;
        case MotionEvent.ACTION_CANCEL:
            Log.i(TAG , "===MyViewPager MotionEvent.ACTION_CANCEL===");
            break;
        }
        return super.dispatchTouchEvent(ev);
    }

}

2、在activity中设置viewpager的数据适配器,给view添加touch事件监听器,添加事件处理的log信息。

package com.example.viewpagerdemo;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageView;

public class MainActivity extends Activity {
   

    private String TAG = "viewpagertest";

    private Integer[] imgList = {R.drawable.first,R.drawable.second,R.drawable.third,R.drawable.four};

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

        MyViewPager viewPager = (MyViewPager) findViewById(R.id.myviewpager);
        viewPager.setAdapter(new MyAdapter());
    }

    class MyAdapter extends PagerAdapter {

        @Override
        public int 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值