今天在播放器中,突然想到了如果列表项过多,那么用户手指连续滑着回到顶部未免太累!类似微信朋友圈的 双击 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);
}
});