GitOPEN's Home.

自定义Toolbar添加双击事件

Word count: 482 / Reading time: 2 min
2017/01/07 Share

前言

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

预览图

自定义Toolbar添加双击事件

SuperToolbar.java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

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源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
}
}

使用方法

1
2
3
4
5
6
7
8
9
10
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);
}
});

结语

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



欣慰帮到你 一杯热咖啡
【奋斗的Coder!】企鹅群
【奋斗的Coder】公众号
CATALOG
  1. 1. 前言
    1. 1.1. 预览图
    2. 1.2. SuperToolbar.java代码:
    3. 1.3. TapListener.java源码:
    4. 1.4. 使用方法
    5. 1.5. 结语