我使用lib MaterialWidget中的CircleButton。在我的片段中,我尝试在此组件上使用LongClickListener,但它不起作用。 ClickListener正在运行,但不是很长。
它正在使用标准按钮。
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_home_home, container, false);
rootView.findViewById(R.id.cb_startPhotoe).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isLongClickReleased) {
Intent i = new Intent(getActivity(), NavigationActivity.class);
i.putExtra("fake", 1);
startActivity(i);
}
}
});
rootView.findViewById(R.id.cb_startPhotoe).setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
isLongClickReleased = false;
displayMenu(rootView);
return true;
}
});
return rootView;
}
当我看到lib的代码时,没有什么特别的东西出现在我身上。 在调试模式下,不会触发侦听器 即使我评论OnClickListener,也没有任何作用。
答案 0 :(得分:1)
我没有使用特定的库但是我读了代码并发现在onTouchEvent
方法中,performClick()
在MOTION_UP case块中被调用一次。这是触发OnClickListener的原因。因此,长按一下,您需要插入适合您需要的方法performLongClick()
。
我的想法是长按一下。它非常简单,但您需要自定义CircleButton类。所以添加一个类变量说long tsDown;
private long tsDown;
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
...
tsDown = System.currentTimeMillis();
break;
case MotionEvent.ACTION_UP:
...
if (!mMoveOutside) {
long tsUp = System.currentTimeMillis();
if (tsUp - tsDown < 1000){
// if press duration is below 1s
performClick();
}else{
performLongClick();
}
}
break;
}
return true;
}