私はこの単純な問題を解決するために過去数日間頭を悩ませています..誰かがこれを解決するためのヒントをくれれば素晴らしいと思います..シナリオは次のとおりです.
私は自分のアプリに10個の異なる画像(a1.png、b1.png、c1.png、d1.pngなど)を表示するviewPagerを持っています.Threadsを使って画像のスライドショーを自動的に行いました.ユーザーが画像をタップすると、a2.png を表示する必要があります。ユーザーが同じ画像をタップすると、a3.png などが表示されます。ユーザーがしばらく放置すると、タップした後、スレッドが実行され、a3.png、b3.png、c3.png が自動的に表示されます。ユーザーが画像をタップしたときにズームアウト/ズームインのアニメーションを設定しています。
私の問題は、ユーザーが a1.png をタップすると a2.png が表示されるはずなのに、b2.png が表示されていることです。ここにコードがあります、
... some code ...
int currentPage = 0;
pageSwitcher(10); //Switch Pages for every 10 seconds
... some code ...
public void pageSwitcher(int seconds) {
timer = new Timer(); // At this line a new Thread will be created
timer.scheduleAtFixedRate(new RemindTask(), 0, seconds * 1000); // delay // in milliseconds
}
class RemindTask extends TimerTask {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
if (currentPage > 10) {
viewPager.setCurrentItem(currentPage=0);
} else {
viewPager.setCurrentItem(currentPage++);
}
}
});
}
}
public boolean onSingleTapConfirmed(MotionEvent e) {
//Modify the adapter with different set of array and set it to ViewPager
... some code ...
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(currentPage);
viewPager.startAnimation(anim);
}
// I'm cancelling the current running timer when the animation starts and call PageSwitcher function when the animation ends as below,
anim = AnimationUtils.loadAnimation(context, R.anim.scale);
anim.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation animation) {
timer.cancel();
}
public void onAnimationRepeat(Animation animation) {}
public void onAnimationEnd(Animation animation) {
pageSwitcher(10);
}
});
上記のように、問題は、ユーザーが画像 (c3.png など) をタップすると、c4.png が表示され、スレッドが実行されるはずですが、d4.png などが表示されます。
どこにも明確でない場合はお知らせください..ポインタは非常に役立ちます。