前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自定义Toolbar添加双击事件

自定义Toolbar添加双击事件

作者头像
GitOPEN
发布2019-01-29 10:06:01
1.6K0
发布2019-01-29 10:06:01
举报

前言

今天在播放器中,突然想到了如果列表项过多,那么用户手指连续滑着回到顶部未免太累!类似微信朋友圈的双击TitleBar返回顶部,既然微信这超级App都实现了,那还等什么呢?动手做起来吧。我们这里是双击Toolbar返回顶部,不仅如此,其实在回调方法中可以做自己想做的事情。

预览图

自定义Toolbar添加双击事件
自定义Toolbar添加双击事件

SuperToolbar.java代码:

代码语言:javascript
复制

public class SuperToolbar extends Toolbar implements TapListener.OnDoubleTapListener {

    private OnTwoTapListener mOnTwoTapListener;
    private GestureDetector mDetector;


    public interface OnTwoTapListener {
        void onTwoTap();
    }

    public void setOnTwoTapListener(OnTwoTapListener onTwoTapListener) {
        mOnTwoTapListener = onTwoTapListener;
    }

    public SuperToolbar(Context context) {
        this(context, null);
    }

    public SuperToolbar(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, android.support.v7.appcompat.R.attr.toolbarStyle);
    }

    public SuperToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        TapListener tapListener = new TapListener(this);
        mDetector = new GestureDetector(context, tapListener);
    }


    @Override
    public void onDouble() {
        mOnTwoTapListener.onTwoTap();
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        super.onTouchEvent(ev);
        mDetector.onTouchEvent(ev);
        return true;
    }
}

TapListenerGestureDetector.SimpleOnGestureListener 的子类,我们需要它的 onDoubleTap(MotionEvent e) 方法 , SuperToolbar 实现了TapListener.OnDoubleTapListener这个接口,用于触发 onDoubleTap 这个双击方法。

TapListener.java源码:

代码语言:javascript
复制
public class TapListener extends GestureDetector.SimpleOnGestureListener {

    private OnDoubleTapListener mDoubleTapListener;

    public TapListener(OnDoubleTapListener onDoubleTapListener) {
        mDoubleTapListener = onDoubleTapListener;
    }

    public interface OnDoubleTapListener {
        void onDouble();
    }

    @Override
    public boolean onDoubleTap(MotionEvent e) {
        mDoubleTapListener.onDouble();
        return true;
    }
}

使用方法

代码语言:javascript
复制
SuperToolbar toolbar = (SuperToolbar) actView.findViewById(R.id.tool_bar);
toolbar.setOnTwoTapListener(new SuperToolbar.OnTwoTapListener() {
    @Override
    public void onTwoTap() {
        //我的一个工具显示Toast,在双击后让RecyclerView返回列表顶部
        // 在这里可以干你自己想干的事情,whatever,who care!
        mUtils.sToast("双击!双击!Toolbar!");
        mRecycler.smoothScrollToPosition(0);
    }
});

结语

今天写的这两篇博文记录的代码都是非常简单实用,用起来也很方便。大家有问题的话,可以看下面的联系方式找到我,我们一起讨论。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017/01/07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 预览图
      • SuperToolbar.java代码:
        • TapListener.java源码:
          • 使用方法
            • 结语
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档