package com.dahe.gldriver.weight

import android.content.Context
import android.util.AttributeSet
import androidx.viewpager.widget.ViewPager
import android.view.MotionEvent

/**
 * Created by Administrator on 2018/7/16 0016.
 */
class NoScrollViewPager : ViewPager {
    private val isCanScroll = false

    constructor(context: Context?) : super(context!!) {}
    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {}

    /**
     * 去掉viewpage滑动动画
     *
     * @param item
     */
    override fun setCurrentItem(item: Int) {
        super.setCurrentItem(item, false)
    }

    /**
     * 1.dispatchTouchEvent一般情况不做处理
     * ,如果修改了默认的返回值,子孩子都无法收到事件
     */
    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        return super.dispatchTouchEvent(ev) // node_return true;不行
    }

    /**
     * 是否拦截
     * 拦截:会走到自己的onTouchEvent方法里面来
     * 不拦截:事件传递给子孩子
     */
    override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
        // node_return false;//可行,不拦截事件,
        // node_return true;//不行,孩子无法处理事件
        //node_return super.onInterceptTouchEvent(ev);//不行,会有细微移动
        return if (isCanScroll) {
            super.onInterceptTouchEvent(ev)
        } else {
            false
        }
    }

    /**
     * 是否消费事件
     * 消费:事件就结束
     * 不消费:往父控件传
     */
    override fun onTouchEvent(ev: MotionEvent): Boolean {
        //node_return false;// 可行,不消费,传给父控件
        //node_return true;// 可行,消费,拦截事件
        //super.onTouchEvent(ev); //不行,
        //虽然onInterceptTouchEvent中拦截了,
        //但是如果viewpage里面子控件不是viewgroup,还是会调用这个方法.
        return if (isCanScroll) {
            super.onTouchEvent(ev)
        } else {
            true // 可行,消费,拦截事件
        }
    }

    fun setScroll(isCanScroll: Boolean) {
        var isCanScroll = isCanScroll
        isCanScroll = isCanScroll
    }
}