我有一个包含四个按钮的Activity,它们在单击时都会触发相同的onClick()方法。我想阻止该方法的并发调用/访问。
问题:
如果在Activity中同时按下两个按钮(或者只相隔几毫秒),那么我的自定义滚动方法会在完成第一个按钮点击执行之前再次调用。
试过案例
相关代码:
private OnClickListener mClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
int viewId = view.getId();
//Proshop top icon
if(viewId == R.id.proshop_icon){
if(hasClicked){
return;
}
hasClicked = true;
mProShopIconTop.startAnimation(proShopButtonAnimation());
if(mHScrollView.getCurrentChildIndex() == 0){
addAndMoveToSecondPage(mProshopPageView, true);
} else {
addAndMoveToSecondPage(mProshopPageView, false);
}
hasClicked = false;
}
//Tune top icon
else if(viewId == mTuneIconTop.getId()){
if(hasClicked){
return;
}
hasClicked = true;
mTuneIconTop.startAnimation(tuneButtonAnimation());
if(mHScrollView.getCurrentChildIndex() == 0){
addAndMoveToSecondPage(mTunePageView, true);
} else {
addAndMoveToSecondPage(mTunePageView, false);
}
hasClicked = false;
}
//bottom and top aiConnect button
else if(viewId == mAiConnect.getId() || viewId == mAiConnectIconTop.getId()){
if(hasClicked){
return;
}
hasClicked = true;
mAiConnectIconTop.startAnimation(aiConnectButtonAnimation());
if(mHScrollView.getCurrentChildIndex() == 0){
addAndMoveToSecondPage(mAIConnectPageView, true);
} else {
addAndMoveToSecondPage(mAIConnectPageView, false);
}
hasClicked = false;
}
//DR page play game button
else if(viewId == mPlayGame.getId()){
if(hasClicked){
return;
}
hasClicked = true;
playGolfClick();
addAndMoveToSecondPage(mGameMenuPageView, true);
hasClicked = false;
}
}
}
这是我从onCLick打来的代码。
private void addAndMoveToSecondPage(View view, boolean withScroll){
mHScrollView.removePage(1);
mHScrollView.addPage(view, 1);
if(withScroll){
mHScrollView.moveToNextView();
}
view.setVisibility(View.VISIBLE);
}
mHScrollView 是我自定义的HorizontalScrollView实例,我将下面的方法合并到我的CustomHorizontalScrolView中,它是HorizontalScrolView的子类。
public void moveToNextView(){
smoothScrollTo(getScrollX() + mScreenWidth, 0);
}
任何帮助将不胜感激..提前致谢.. !!
答案 0 :(得分:2)
您遇到问题的原因不是因为并发(因为两个方法都是在UI线程中按顺序调用),而是因为您的两个动画同时启动。因此,您需要做的是setAnimationListener
动画,并禁止点击事件直到onAnimationEnd(Animation animation)
未被调用。这样,您在当前时刻只能播放一个动画。