今天在播放器中,突然想到了如果列表项过多,那么用户手指连续滑着回到顶部未免太累!类似微信朋友圈的 双击 TitleBar 返回顶部 ,既然微信这超级App都实现了,那还等什么呢?动手做起来吧。我们这里是 双击Toolbar返回顶部 ,不仅如此,其实在回调方法中可以做自己想做的事情。
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; } }
TapListener 是 GestureDetector.SimpleOnGestureListener 的子类,我们需要它的 onDoubleTap(MotionEvent e) 方法 , SuperToolbar 实现了TapListener.OnDoubleTapListener这个接口,用于触发 onDoubleTap 这个双击方法。
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); } });