转载

自定义Toolbar添加双击事件

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

预览图

自定义Toolbar添加双击事件

SuperToolbar.java代码:

public classSuperToolbarextendsToolbarimplementsTapListener.OnDoubleTapListener{

    private OnTwoTapListener mOnTwoTapListener;
    private GestureDetector mDetector;


    public interfaceOnTwoTapListener{
        voidonTwoTap();
    }

    publicvoidsetOnTwoTapListener(OnTwoTapListener onTwoTapListener){
        mOnTwoTapListener = onTwoTapListener;
    }

    publicSuperToolbar(Context context){
        this(context, null);
    }

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

    publicSuperToolbar(Context context, @Nullable AttributeSet attrs,intdefStyleAttr){
        super(context, attrs, defStyleAttr);

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


    @Override
    publicvoidonDouble(){
        mOnTwoTapListener.onTwoTap();
    }

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

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

TapListener.java源码:

public classTapListenerextendsGestureDetector.SimpleOnGestureListener{

    private OnDoubleTapListener mDoubleTapListener;

    publicTapListener(OnDoubleTapListener onDoubleTapListener){
        mDoubleTapListener = onDoubleTapListener;
    }

    public interfaceOnDoubleTapListener{
        voidonDouble();
    }

    @Override
    publicbooleanonDoubleTap(MotionEvent e){
        mDoubleTapListener.onDouble();
        return true;
    }
}

使用方法

SuperToolbar toolbar = (SuperToolbar) actView.findViewById(R.id.tool_bar);
toolbar.setOnTwoTapListener(new SuperToolbar.OnTwoTapListener() {
    @Override
    publicvoidonTwoTap(){
        //我的一个工具显示Toast,在双击后让RecyclerView返回列表顶部
        // 在这里可以干你自己想干的事情,whatever,who care!
        mUtils.sToast("双击!双击!Toolbar!");
        mRecycler.smoothScrollToPosition(0);
    }
});
原文  http://sunjiajia.com/2017/01/07/double-tap-toolbar/
正文到此结束
Loading...