CircleButton LongClickListener 未触发
CircleButton LongClickListener not triggered
我使用了库 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;
}
当我看到库的代码时,我觉得没什么特别的。
在调试模式下,不会触发侦听器
即使我评论 OnClickListener,也没有任何效果。
我不使用特定的库,但我阅读了代码并发现在 onTouchEvent
方法中,performClick()
在 MOTION_UP 案例块中被调用一次。这就是触发您的 OnClickListener 的原因。因此,对于长按,您需要插入适合您需要的方法 performLongClick()
。
这是我的长按想法。这很简单,但您需要自定义 CircleButton class。所以添加一个 class 变量说 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;
}
我使用了库 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;
}
当我看到库的代码时,我觉得没什么特别的。 在调试模式下,不会触发侦听器 即使我评论 OnClickListener,也没有任何效果。
我不使用特定的库,但我阅读了代码并发现在 onTouchEvent
方法中,performClick()
在 MOTION_UP 案例块中被调用一次。这就是触发您的 OnClickListener 的原因。因此,对于长按,您需要插入适合您需要的方法 performLongClick()
。
这是我的长按想法。这很简单,但您需要自定义 CircleButton class。所以添加一个 class 变量说 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;
}