|
6 | 6 | import android.content.res.TypedArray;
|
7 | 7 | import android.graphics.Canvas;
|
8 | 8 | import android.graphics.Paint;
|
| 9 | +import android.os.AsyncTask; |
9 | 10 | import android.text.Layout;
|
10 | 11 | import android.text.StaticLayout;
|
11 | 12 | import android.text.TextPaint;
|
@@ -164,24 +165,54 @@ public void setLabel(String label) {
|
164 | 165 | *
|
165 | 166 | * @param lrcFile 歌词文件
|
166 | 167 | */
|
167 |
| - public void loadLrc(File lrcFile) { |
168 |
| - List<LrcEntry> entryList = LrcEntry.parseLrc(lrcFile); |
169 |
| - onLrcLoaded(entryList); |
| 168 | + public void loadLrc(final File lrcFile) { |
| 169 | + reset(); |
| 170 | + |
| 171 | + setTag(lrcFile); |
| 172 | + AsyncTask<File, Integer, List<LrcEntry>> loadLrcTask = new AsyncTask<File, Integer, List<LrcEntry>>() { |
| 173 | + @Override |
| 174 | + protected List<LrcEntry> doInBackground(File... params) { |
| 175 | + return LrcEntry.parseLrc(params[0]); |
| 176 | + } |
| 177 | + |
| 178 | + @Override |
| 179 | + protected void onPostExecute(List<LrcEntry> lrcEntries) { |
| 180 | + if (getTag() == lrcFile) { |
| 181 | + onLrcLoaded(lrcEntries); |
| 182 | + setTag(null); |
| 183 | + } |
| 184 | + } |
| 185 | + }; |
| 186 | + loadLrcTask.execute(lrcFile); |
170 | 187 | }
|
171 | 188 |
|
172 | 189 | /**
|
173 | 190 | * 加载歌词文件
|
174 | 191 | *
|
175 | 192 | * @param lrcText 歌词文本
|
176 | 193 | */
|
177 |
| - public void loadLrc(String lrcText) { |
178 |
| - List<LrcEntry> entryList = LrcEntry.parseLrc(lrcText); |
179 |
| - onLrcLoaded(entryList); |
| 194 | + public void loadLrc(final String lrcText) { |
| 195 | + reset(); |
| 196 | + |
| 197 | + setTag(lrcText); |
| 198 | + AsyncTask<String, Integer, List<LrcEntry>> loadLrcTask = new AsyncTask<String, Integer, List<LrcEntry>>() { |
| 199 | + @Override |
| 200 | + protected List<LrcEntry> doInBackground(String... params) { |
| 201 | + return LrcEntry.parseLrc(params[0]); |
| 202 | + } |
| 203 | + |
| 204 | + @Override |
| 205 | + protected void onPostExecute(List<LrcEntry> lrcEntries) { |
| 206 | + if (getTag() == lrcText) { |
| 207 | + onLrcLoaded(lrcEntries); |
| 208 | + setTag(null); |
| 209 | + } |
| 210 | + } |
| 211 | + }; |
| 212 | + loadLrcTask.execute(lrcText); |
180 | 213 | }
|
181 | 214 |
|
182 | 215 | private void onLrcLoaded(List<LrcEntry> entryList) {
|
183 |
| - reset(); |
184 |
| - |
185 | 216 | if (entryList != null && !entryList.isEmpty()) {
|
186 | 217 | mLrcEntryList.addAll(entryList);
|
187 | 218 | }
|
@@ -256,6 +287,7 @@ private void reset() {
|
256 | 287 | mNextTime = 0L;
|
257 | 288 |
|
258 | 289 | stopAnimation();
|
| 290 | + postInvalidate(); |
259 | 291 | }
|
260 | 292 |
|
261 | 293 | private void initEntryList() {
|
|
0 commit comments