下面我发布了我正在运行的线程的代码,以通过 harism 在 Page Curl 活动顶部的 RelativeLayout 中为文本设置动画。
public void startProgress(final int index)
{
runnable = new Runnable()
{
@Override
public void run()
{
mArrWords.removeAll(mArrWords);
mStart.removeAll(mStart);
mEnd.removeAll(mEnd);
words = sentence.split(" ");
for(int i = 0; i < words.length; i++)
{
mArrWords.add(words[i]);
if(i == 0)
{
mStart.add(0);
mEnd.add(words[0].length());
}
else
{
mStart.add(mEnd.get(i-1)+1);
mEnd.add(mStart.get(i)+words[i].length());
}
/*Log.e("words", "" + "" + words[i]);
Log.e("mArrWords", "" + mArrWords);
Log.e("mStart", "" + mStart);
Log.e("mEnd", "" + mEnd);*/
}
for (int i = 0; i < mArrWords.size(); i++)
{
final int value = i;
try
{
Thread.sleep(500);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
mHandler.post(new Runnable()
{
@Override
public void run()
{
currIndex = index;
try
{
if(CurlView.ANIMATE)
tv1.setVisibility(View.VISIBLE);
else
tv1.setVisibility(View.GONE);
final Pattern p = Pattern.compile(mArrWords.get(value));
final Matcher matcher = p.matcher(sentence);
SpannableString spannableTxt = new SpannableString(sentence);
ForegroundColorSpan span = new ForegroundColorSpan(Color.RED);
while(matcher.find())
spannableTxt.setSpan(span, mStart.get(value), mEnd.get(value), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv1.setText(spannableTxt);
mHandler.sendEmptyMessage(0);
}
catch (Exception e)
{
e.printStackTrace();
mHandler.sendEmptyMessage(0);
}
}
});
}
}
};
final ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor();
worker.schedule(runnable, CurlView.ANIMTIME+50, TimeUnit.MILLISECONDS);
}
在这里,我正在为图像上的文本设置动画。我需要更改要更改的每一页的文本。我可以更改文本,但是,当我翻页时,我存储在 ArrayLists 中的索引值没有被清除。我将一个句子存储在一个名为 mArrWords 的 ArrayList 中,并且引用句子每个单词的索引存储在 mStart 和 mEnd 中。
我面临的问题是当文本更改时,动画从存储在 mStart 和 mEnd ArrayLists 中的先前索引开始,我用来存储特定单词的索引。我需要知道的是,当页面被翻页或页面索引发生变化时,如何停止我的线程。我在 Curl 活动的 updatePage(final CurlPage page, final int width, final int height, final int index) 方法中调用此函数。我希望我能够解释我的问题。谢谢!
编辑:我想更清楚地说明我的问题。如何在启动另一个线程并停止执行前一个线程之前检查线程是否已经运行?