关于方法的调用情况

对于方法的执行次数,可以再使用类的成员变量。

只调用一次,可以使用一个Boolean型变量,如:

if (mDragWordCount >= 2) {
Log.d("drag", "mDragWordCount >= 2");


if (!onlyOnce) {
nextWord();
onlyOnce = true;
}


} else {
Log.d("drag", "mDragWordCount <2");
nextWord();
}
}


本案例主要是解决移动多个字母时出现的,多次调用方法setContent(),以致出现致命的错误。比如一个fragment中有五个单词,那么,如果对当前的单词移动的字母至少两个,那么方法setContent()至少调用两次,也就是说,显示下一个单词的是至少是第三个了,第二个根本就没有显示。由于之前设置的是一个针对于Fragment的成员变量,只有一个,而没有针对每个单词进行设置成员变量,也就是,当我,每次调用方法setContent()时,我进行设置,如代码:
private void setContent(int index) {


mDraListener = new DragAnimationListener();


Log.d(TAG, pageCount + "===pageCount==index=" + index);


if (pageCount < 5) {


mRandomChars = ConfigWordData.vocabulary.ALPHABETS[index][pageCount];


Log.d(TAG, mRandomChars + "---------------");


mSpliceWord = ConfigWordData.vocabulary.SPLICE_VOCABULARYS[index][pageCount];
mRightWord = ConfigWordData.vocabulary.RIGHT_VOCABULARYS[index][pageCount];
imageId = ConfigWordData.picture.WORD_PICTURES[index][pageCount];


mWordPic.setBackgroundResource(imageId);
pageCount++;
}
}
这样就可以,解决掉每个单词对应着一个动画监听器,而不是。五个单词对应着一个监听器。因此,也就解决了之前的困扰。


本案例主要是针对一个单词中字母的移动的情况,对匹配不同的字母进行自动移动匹配,寻找正确地位置,自己站到那里去。
一个字母匹配有误的话,动画也就只执行一次,当有两个以上时,会调用多次。


动画监听:
public class DragAnimationListener implements AnimationListener {


/**
* The method nextWord only do one time every word .
*/
private boolean onlyOnce = false;


@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub


}


@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub


}


@Override
public void onAnimationEnd(Animation animation) {


if (mDragWordCount >= 2) {
Log.d("drag", "mDragWordCount >= 2");


if (!onlyOnce) {
nextWord();
onlyOnce = true;
}


} else {
Log.d("drag", "mDragWordCount <2");
nextWord();
}
}
}


动画设置代码:
for (int l = 0; l < mAlphabetList.size(); l++) {


if (mAlphaList.get(l).getText().toString()
.equals(indexContent)
&& !mSpliceRWList
.get(k)
.getAlphabet()
.equals(mSpliceWList.get(k)
.getAlphabet())) {


Alphabet alphaF = mAlphabetList.get(l);


Alphabet alphaT = mSpliceRWList.get(k);


float fromX = (float) alphaF.getX();
float fromY = (float) alphaF.getY();
float toX = (float) alphaT.getX();
float toY = (float) alphaT.getY();


float dx = toX - fromX;
float dy = toY - fromY;


TextView tvDrag = mAlphaList.get(l);
//
// // 拖动的动画的执行次数计算
//
// mDragWordCount++;


Animation dragAnim = new TranslateAnimation(0,
dx, 0, dy);


dragAnim.setDuration(1000);// 设置动画所用的时间


dragAnim.setFillAfter(true);


dragAnim.setAnimationListener(mDraListener);


tvDrag.startAnimation(dragAnim);


// 可能需要需要设置mAlphabetList中的各个坐标
}
}
在动画设置代码中设置了监听器:(mDraListener);
之前是将(mDraListener);这个初始化为这个类(外部类Fragment)的成员变量,导致,很多个单词都共享这个监听器。由于,还有下一个单词,所以在设置下一个单词的方法中nextWord()中调用setContent方法,而在方法setContent中mDraListener = new DragAnimationListener();那么,每一个单词都对应一个监听器,也就是,在动画结束时方法nextWord只会调用一次(一个单词调用一次方法nextWord),按照顺序执行下一个单词。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值