普通网友 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 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝