普通网友 2016-05-04 06:42 采纳率: 100%
浏览 987

安卓关于View的滑动处理的问题,求大神指导指导

看了一下书,说一个view里,如果setOnTouchListener,那么onTouch()方法就会先于onTouchEvent()执行,
就是onTouch()会消耗了滑动事件,并返回true和不再调用onTouchEvent(),如果onTouch()返回false,表示未消耗滑动事件,然后就会调用onTouchEvent()处理。

然后我想了一想,如果onTouch()里消耗了滑动事件,但我又返回false,那么会是怎样的情况?于是我写了一下如下代码。

如下是OuterLayout extends LinearLayout,用来试验上述问题用的layout

 public class OuterLayout extends LinearLayout
{
    public OuterLayout(Context context)
    {
        this(context,null);
    }

    public OuterLayout(Context context,AttributeSet attrs)
    {
        this(context,attrs,0);
    }

    public OuterLayout(Context context,AttributeSet attrs,int defStyleAttr)
    {
        super(context,attrs,defStyleAttr);

    }

    public boolean onTouchEvent(MotionEvent ev)
    {
        switch(ev.getAction())
        {
        case MotionEvent.ACTION_DOWN:
            Log.e("test","now outer-layout action down");
            break;
        case MotionEvent.ACTION_MOVE:
            Log.e("test","now outer-layout action move");
            break;
        case MotionEvent.ACTION_UP:
            Log.e("test","now outer-layout action up");
            break;

        }

        return true;
    }
}

在MainActivity中

LinearLayout outerLayout;

outerLayout=(LinearLayout)super.findViewById(R.id.outerlayout);
 outerLayout.setOnTouchListener(this);

public boolean onTouch(View v,MotionEvent event)
    {
        switch(event.getAction())
        {
        case MotionEvent.ACTION_DOWN:
            Log.e("test","on touch actiondown");
        case MotionEvent.ACTION_MOVE:
            Log.e("test","on touch action move");
        case MotionEvent.ACTION_UP:
            Log.e("test","on touch action up");
        }
        return false;
    }

就是outerLayout中覆写了onTouchEvent(),并setOnTouchListener(),然后下面观察一下后台输出:
图片说明
上图是布局,outerlayout是粉红色整块。

图片说明
图片说明
这个输出很奇怪,有大神解释解释为什么会有这样的结果吗?

  • 写回答

1条回答

  • yclids 2016-05-07 19:20
    关注

    这是因为你的MainActivity中的重写的onTouch方法里面的switch少了关键字**break**!,你加上就符合View的事件传递规则了!不信你可以试试!

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记