ListView不可滚动  并解决嵌套scrollView问题

package com.example.ibm.game.game;

import android.content.Context ;
import android.util.AttributeSet ;
import android.view.MotionEvent ;
import android.widget.ListView ;

/**
 * Created by ibm on 2016/5/9.
 */
public class WomenListView  extends ListView {
    private int  mPosition ;

    public WomenListView(Context context) {
        super(context) ;
    }

    public WomenListView(Context context AttributeSet attrs) {
        super(context attrs) ;
    }

    public WomenListView(Context context AttributeSet attrs , int defStyle) {
        super(context attrs defStyle) ;
    }
   
    //写该方法使ListView不可滚动
    @Override
    public boolean  dispatchTouchEvent(MotionEvent ev) {
        final int actionMasked = ev.getActionMasked() & MotionEvent. ACTION_MASK ;

        if (actionMasked == MotionEvent. ACTION_DOWN) {
            // 记录手指按下时的位置
            mPosition = pointToPosition(( int) ev.getX() ( int) ev.getY()) ;
            return super.dispatchTouchEvent(ev) ;
        }
        if (actionMasked == MotionEvent. ACTION_MOVE) {
            // 最关键的地方,忽略MOVE 事件
            // ListView onTouch获取不到MOVE事件所以不会发生滚动处理
            return true;
        }

        // 手指抬起时
        if (actionMasked == MotionEvent. ACTION_UP
                || actionMasked == MotionEvent. ACTION_CANCEL) {
            // 手指按下与抬起都在同一个视图内,交给父控件处理,这是一个点击事件
            if (pointToPosition(( int) ev.getX() ( int) ev.getY()) ==  mPosition) {
                super.dispatchTouchEvent(ev) ;
           else {
                // 如果手指已经移出按下时的Item,说明是滚动行为,清理Item pressed状态
                setPressed( false) ;
                invalidate() ;
                return true;
            }
        }

        return super.dispatchTouchEvent(ev) ;
    }
   
   
    //重写此方法解决嵌套冲突问题
    @Override
    protected void  onMeasure( int widthMeasureSpec , int heightMeasureSpec) {
        int expandSpec = MeasureSpec. makeMeasureSpec(Integer. MAX_VALUE >>  2 ,
                MeasureSpec. AT_MOST) ;
        super.onMeasure(widthMeasureSpec expandSpec) ;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值