From 9b109489ffae113d59f59c961788ff9f6ba00a71 Mon Sep 17 00:00:00 2001 From: calmer Date: Fri, 15 Nov 2013 10:02:49 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=B7=A5=E7=A8=8B=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/AndroidManifest.xml | 15 +- .../controller/CacheManagingDrawTask.java | 8 +- .../flame/danmaku/controller/DrawHelper.java | 102 +- .../flame/danmaku/controller/DrawTask.java | 18 +- .../danmaku/controller/DrawingBuffer.java | 294 ++-- .../flame/danmaku/danmaku/loader/ILoader.java | 74 +- .../danmaku/loader/IllegalDataException.java | 54 +- .../loader/android/AcFunDanmakuLoader.java | 106 +- .../loader/android/BiliDanmakuLoader.java | 126 +- .../loader/android/DanmakuLoaderFactory.java | 68 +- .../danmaku/danmaku/model/AlphaValue.java | 20 +- .../danmaku/danmaku/model/BaseDanmaku.java | 402 ++--- .../flame/danmaku/danmaku/model/Danmaku.java | 128 +- .../danmaku/danmaku/model/DanmakuTimer.java | 76 +- .../danmaku/danmaku/model/FBDanmaku.java | 60 +- .../danmaku/danmaku/model/FTDanmaku.java | 182 +-- .../danmaku/danmaku/model/IDanmakus.java | 62 +- .../danmaku/danmaku/model/IDisplayer.java | 76 +- .../danmaku/danmaku/model/IDrawingCache.java | 28 +- .../danmaku/danmaku/model/L2RDanmaku.java | 176 +- .../danmaku/danmaku/model/RingBuffer.java | 130 +- .../danmaku/danmaku/model/SpecialDanmaku.java | 242 +-- .../danmaku/model/android/Danmakus.java | 424 ++--- .../danmaku/model/android/DrawingCache.java | 152 +- .../model/android/DrawingCacheHolder.java | 140 +- .../android/DrawingCachePoolManager.java | 46 +- .../danmaku/parser/BaseDanmakuParser.java | 107 +- .../danmaku/danmaku/parser/IDataSource.java | 56 +- .../parser/android/AcFunDanmakuParser.java | 132 +- .../parser/android/AndroidFileSource.java | 180 +-- .../parser/android/BiliDanmukuParser.java | 4 - .../danmaku/parser/android/JSONSource.java | 148 +- .../danmaku/danmaku/renderer/IRenderer.java | 56 +- .../danmaku/danmaku/renderer/Renderer.java | 42 +- .../renderer/android/DanmakuRenderer.java | 130 +- .../danmaku/danmaku/util/AndroidCounter.java | 70 +- .../flame/danmaku/danmaku/util/IOUtils.java | 84 +- .../danmaku/ui/widget/DanmakuSurfaceView.java | 29 +- LICENSE | 382 ++--- Sample/src/main/AndroidManifest.xml | 12 +- Sample/src/main/assets/comment.json | 1 + .../main/java/com/sample/MainActivity.java | 160 +- Sample/src/main/res/layout/activity_main.xml | 41 + .../src/main/res/layout/media_controller.xml | 15 + Sample/src/main/res/raw/comments.xml | 1420 +++++++++++++++++ Sample/src/main/res/values/dimens.xml | 4 +- Sample/src/main/res/values/strings.xml | 9 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 14 +- gradlew.bat | 180 +-- 50 files changed, 4029 insertions(+), 2458 deletions(-) create mode 100644 Sample/src/main/assets/comment.json create mode 100644 Sample/src/main/res/layout/activity_main.xml create mode 100644 Sample/src/main/res/layout/media_controller.xml create mode 100644 Sample/src/main/res/raw/comments.xml diff --git a/DanmakuFlameMaster/src/main/AndroidManifest.xml b/DanmakuFlameMaster/src/main/AndroidManifest.xml index 32c176ff..2e145c37 100644 --- a/DanmakuFlameMaster/src/main/AndroidManifest.xml +++ b/DanmakuFlameMaster/src/main/AndroidManifest.xml @@ -29,22 +29,9 @@ - - - - - - - + diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/CacheManagingDrawTask.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/CacheManagingDrawTask.java index 27d3bfc3..2011ac8c 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/CacheManagingDrawTask.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/CacheManagingDrawTask.java @@ -36,12 +36,8 @@ public CacheManagingDrawTask(DanmakuTimer timer, Context context, int dispW, int @Override public void prepare() { - if (mParser == null) { - // load from testing danmaku file - loadDanmakus(mContext, mTimer); - } else { - loadDanmakus(mParser); - } + assert (mParser != null); + loadDanmakus(mParser); mCacheManager.begin(); } diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/DrawHelper.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/DrawHelper.java index 3a7a3b6b..a1f6851d 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/DrawHelper.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/DrawHelper.java @@ -1,51 +1,51 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.controller; - -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.PorterDuff; - -public class DrawHelper { - - public static Paint paint; - static { - paint = new Paint(); - paint.setColor(Color.RED); - paint.setTextSize(50); - //paint.setAntiAlias(true); - } - - public static void drawText(Canvas canvas, String text) { - - canvas.drawText(text, 10, canvas.getHeight() - 50, paint); - - } - - public static void drawDuration(Canvas canvas, String text) { - canvas.drawText(text, 100, 100, paint); - } - - public static void drawCircle(float cx, float cy, Canvas canvas) { - canvas.drawCircle(cx, cy, 50, paint); - } - - public static void clearCanvas(Canvas canvas) { - canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); - } -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.controller; + +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.PorterDuff; + +public class DrawHelper { + + public static Paint paint; + static { + paint = new Paint(); + paint.setColor(Color.RED); + paint.setTextSize(50); + //paint.setAntiAlias(true); + } + + public static void drawText(Canvas canvas, String text) { + + canvas.drawText(text, 10, canvas.getHeight() - 50, paint); + + } + + public static void drawDuration(Canvas canvas, String text) { + canvas.drawText(text, 100, 100, paint); + } + + public static void drawCircle(float cx, float cy, Canvas canvas) { + canvas.drawCircle(cx, cy, 50, paint); + } + + public static void clearCanvas(Canvas canvas) { + canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); + } +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/DrawTask.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/DrawTask.java index f23a744b..a7dad098 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/DrawTask.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/DrawTask.java @@ -60,9 +60,9 @@ public class DrawTask implements IDrawTask { AndroidCounter mCounter; - private ILoader mLoader; +// private ILoader mLoader; - private IDataSource dataSource; +// private IDataSource dataSource; protected BaseDanmakuParser mParser; @@ -89,12 +89,8 @@ public void setParser(BaseDanmakuParser parser){ } public void prepare(){ - if (mParser == null) { - // load from testing danmaku file - loadDanmakus(mContext, mTimer); - } else { - loadDanmakus(mParser); - } + assert (mParser != null); + loadDanmakus(mParser); if (mTaskListener != null) { mTaskListener.ready(); } @@ -105,10 +101,10 @@ protected void initTimer(DanmakuTimer timer) { } protected void loadDanmakus(BaseDanmakuParser parser) { - danmakuList = parser.setTimer(mTimer).parse(); + danmakuList = parser.setDisp(mDisp).setTimer(mTimer).parse(); } - protected void loadDanmakus(Context context, DanmakuTimer timer) { +/* protected void loadDanmakus(Context context, DanmakuTimer timer) { try { if (DEBUG_OPTION == 0) { loadAcDanmakus(context.getAssets().open("comment.json"), timer); @@ -145,7 +141,7 @@ private void loadAcDanmakus(InputStream stream, DanmakuTimer timer) { } catch (IllegalDataException e) { Log.e(TAG, "load error", e); } - } + }*/ @Override public void draw(Canvas canvas) { diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/DrawingBuffer.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/DrawingBuffer.java index 82dc946e..59e99e4c 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/DrawingBuffer.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/controller/DrawingBuffer.java @@ -1,147 +1,147 @@ - -package master.flame.danmaku.controller; - -import android.graphics.Bitmap; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import master.flame.danmaku.danmaku.model.IDisplayer; -import master.flame.danmaku.danmaku.model.RingBuffer; -import master.flame.danmaku.danmaku.model.android.DrawingCacheHolder; - -public abstract class DrawingBuffer { - - private static final String TAG = "DrawingBuffer"; - - public Object mBufferLock = new Object(); - - Thread mThread = new Thread(TAG) { - - @Override - public void run() { - - while (!quitFlag) { - - while (true) { - - synchronized (mBufferLock) { - - if (mScrapList.size() > 0) { - DrawingCacheHolder holder = mScrapList.get(0); - mScrapList.remove(0); - drawCache(holder); - mBuffer.put(holder); - } - - if (mScrapList.isEmpty()) { - break; - } - } - - try { - Thread.sleep(5); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - synchronized (this) { - try { - wait(); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - - } - - } - - }; - - private IDisplayer mDisp; - - private HolderRingBuffer mBuffer; - - private List mScrapList = new ArrayList(); - - private boolean quitFlag; - - public DrawingBuffer(int capacity, IDisplayer disp) { - mBuffer = new HolderRingBuffer(capacity); - mDisp = disp; - for (int i = 0; i < capacity; i++) { - mScrapList.add(new DrawingCacheHolder(disp.getWidth(), disp.getHeight())); - } - } - - public Bitmap getCache() { - Bitmap bmp = null; - synchronized (mBufferLock) { - DrawingCacheHolder holder = mBuffer.get(); - if (holder != null) { - bmp = holder.bitmap; - mScrapList.add(holder); - } - } - return bmp; - } - - /** - * 使用cache之后调用 - */ - public void fillNext() { - synchronized (mThread) { - mThread.notify(); - } - } - - protected abstract void drawCache(DrawingCacheHolder holder); - - public void start() { - mThread.start(); - } - - public void quit() { - quitFlag = true; - fillNext(); - recyle(); - } - - public void recyle() { - clear(); - synchronized (mBufferLock) { - if (mScrapList != null) { - Iterator it = mScrapList.iterator(); - while (it.hasNext()) { - DrawingCacheHolder holder = it.next(); - holder.recycle(); - it.remove(); - } - } - } - } - - public void clear() { - synchronized (mBufferLock) { - while (!mBuffer.isEmpty()) { - getCache(); - } - } - } - - public class HolderRingBuffer extends RingBuffer { - - public HolderRingBuffer(int capacity) { - super(capacity); - } - - @Override - protected DrawingCacheHolder[] createBuffer(int capacity) { - return new DrawingCacheHolder[capacity]; - } - } - -} + +package master.flame.danmaku.controller; + +import android.graphics.Bitmap; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import master.flame.danmaku.danmaku.model.IDisplayer; +import master.flame.danmaku.danmaku.model.RingBuffer; +import master.flame.danmaku.danmaku.model.android.DrawingCacheHolder; + +public abstract class DrawingBuffer { + + private static final String TAG = "DrawingBuffer"; + + public Object mBufferLock = new Object(); + + Thread mThread = new Thread(TAG) { + + @Override + public void run() { + + while (!quitFlag) { + + while (true) { + + synchronized (mBufferLock) { + + if (mScrapList.size() > 0) { + DrawingCacheHolder holder = mScrapList.get(0); + mScrapList.remove(0); + drawCache(holder); + mBuffer.put(holder); + } + + if (mScrapList.isEmpty()) { + break; + } + } + + try { + Thread.sleep(5); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + synchronized (this) { + try { + wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + } + + } + + }; + + private IDisplayer mDisp; + + private HolderRingBuffer mBuffer; + + private List mScrapList = new ArrayList(); + + private boolean quitFlag; + + public DrawingBuffer(int capacity, IDisplayer disp) { + mBuffer = new HolderRingBuffer(capacity); + mDisp = disp; + for (int i = 0; i < capacity; i++) { + mScrapList.add(new DrawingCacheHolder(disp.getWidth(), disp.getHeight())); + } + } + + public Bitmap getCache() { + Bitmap bmp = null; + synchronized (mBufferLock) { + DrawingCacheHolder holder = mBuffer.get(); + if (holder != null) { + bmp = holder.bitmap; + mScrapList.add(holder); + } + } + return bmp; + } + + /** + * 使用cache之后调用 + */ + public void fillNext() { + synchronized (mThread) { + mThread.notify(); + } + } + + protected abstract void drawCache(DrawingCacheHolder holder); + + public void start() { + mThread.start(); + } + + public void quit() { + quitFlag = true; + fillNext(); + recyle(); + } + + public void recyle() { + clear(); + synchronized (mBufferLock) { + if (mScrapList != null) { + Iterator it = mScrapList.iterator(); + while (it.hasNext()) { + DrawingCacheHolder holder = it.next(); + holder.recycle(); + it.remove(); + } + } + } + } + + public void clear() { + synchronized (mBufferLock) { + while (!mBuffer.isEmpty()) { + getCache(); + } + } + } + + public class HolderRingBuffer extends RingBuffer { + + public HolderRingBuffer(int capacity) { + super(capacity); + } + + @Override + protected DrawingCacheHolder[] createBuffer(int capacity) { + return new DrawingCacheHolder[capacity]; + } + } + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/ILoader.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/ILoader.java index eceec3ad..55691e85 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/ILoader.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/ILoader.java @@ -1,37 +1,37 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.loader; - -import java.io.InputStream; - -import master.flame.danmaku.danmaku.parser.IDataSource; - -public interface ILoader { - /** - * @return data source - */ - IDataSource getDataSource(); - /** - * @param uri 弹幕文件地址(http:// file://) - */ - void load(String uri) throws IllegalDataException; - /** - * - * @param in stream from Internet or local file - */ - void load(InputStream in) throws IllegalDataException; -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.loader; + +import java.io.InputStream; + +import master.flame.danmaku.danmaku.parser.IDataSource; + +public interface ILoader { + /** + * @return data source + */ + IDataSource getDataSource(); + /** + * @param uri 弹幕文件地址(http:// file://) + */ + void load(String uri) throws IllegalDataException; + /** + * + * @param in stream from Internet or local file + */ + void load(InputStream in) throws IllegalDataException; +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/IllegalDataException.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/IllegalDataException.java index 08c0b69f..1511f19a 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/IllegalDataException.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/IllegalDataException.java @@ -1,27 +1,27 @@ -package master.flame.danmaku.danmaku.loader; -/** - * Thrown when data is loading which can not be reasonably deal with. - * @author yrom - * - */ -public class IllegalDataException extends Exception { - - private static final long serialVersionUID = 10441759254L; - - public IllegalDataException() { - super(); - } - - public IllegalDataException(String detailMessage, Throwable throwable) { - super(detailMessage, throwable); - } - - public IllegalDataException(String detailMessage) { - super(detailMessage); - } - - public IllegalDataException(Throwable throwable) { - super(throwable); - } - -} +package master.flame.danmaku.danmaku.loader; +/** + * Thrown when data is loading which can not be reasonably deal with. + * @author yrom + * + */ +public class IllegalDataException extends Exception { + + private static final long serialVersionUID = 10441759254L; + + public IllegalDataException() { + super(); + } + + public IllegalDataException(String detailMessage, Throwable throwable) { + super(detailMessage, throwable); + } + + public IllegalDataException(String detailMessage) { + super(detailMessage); + } + + public IllegalDataException(Throwable throwable) { + super(throwable); + } + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/android/AcFunDanmakuLoader.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/android/AcFunDanmakuLoader.java index 42f77dd5..5ec10b20 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/android/AcFunDanmakuLoader.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/android/AcFunDanmakuLoader.java @@ -1,53 +1,53 @@ -package master.flame.danmaku.danmaku.loader.android; - -import java.io.InputStream; - -import master.flame.danmaku.danmaku.loader.ILoader; -import master.flame.danmaku.danmaku.loader.IllegalDataException; -import master.flame.danmaku.danmaku.parser.android.JSONSource; -import android.net.Uri; -/** - * Ac danmaku loader - * @author yrom - * - */ -public class AcFunDanmakuLoader implements ILoader{ - private AcFunDanmakuLoader(){}; - private static volatile AcFunDanmakuLoader instance; - private JSONSource dataSource; - - public static ILoader instance() { - if(instance == null){ - synchronized (AcFunDanmakuLoader.class){ - if(instance == null) - instance = new AcFunDanmakuLoader(); - } - } - return instance; - } - - @Override - public JSONSource getDataSource() { - return dataSource; - } - - @Override - public void load(String uri) throws IllegalDataException { - try { - dataSource = new JSONSource(Uri.parse(uri)); - } catch (Exception e) { - throw new IllegalDataException(e); - } - } - - @Override - public void load(InputStream in) throws IllegalDataException { - try { - dataSource = new JSONSource(in); - } catch (Exception e) { - throw new IllegalDataException(e); - } - } - - -} +package master.flame.danmaku.danmaku.loader.android; + +import java.io.InputStream; + +import master.flame.danmaku.danmaku.loader.ILoader; +import master.flame.danmaku.danmaku.loader.IllegalDataException; +import master.flame.danmaku.danmaku.parser.android.JSONSource; +import android.net.Uri; +/** + * Ac danmaku loader + * @author yrom + * + */ +public class AcFunDanmakuLoader implements ILoader{ + private AcFunDanmakuLoader(){}; + private static volatile AcFunDanmakuLoader instance; + private JSONSource dataSource; + + public static ILoader instance() { + if(instance == null){ + synchronized (AcFunDanmakuLoader.class){ + if(instance == null) + instance = new AcFunDanmakuLoader(); + } + } + return instance; + } + + @Override + public JSONSource getDataSource() { + return dataSource; + } + + @Override + public void load(String uri) throws IllegalDataException { + try { + dataSource = new JSONSource(Uri.parse(uri)); + } catch (Exception e) { + throw new IllegalDataException(e); + } + } + + @Override + public void load(InputStream in) throws IllegalDataException { + try { + dataSource = new JSONSource(in); + } catch (Exception e) { + throw new IllegalDataException(e); + } + } + + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/android/BiliDanmakuLoader.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/android/BiliDanmakuLoader.java index d704aeae..33e38216 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/android/BiliDanmakuLoader.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/android/BiliDanmakuLoader.java @@ -1,63 +1,63 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.loader.android; - -import master.flame.danmaku.danmaku.loader.ILoader; -import master.flame.danmaku.danmaku.loader.IllegalDataException; -import master.flame.danmaku.danmaku.parser.android.AndroidFileSource; - -import android.net.Uri; - -import java.io.InputStream; - -public class BiliDanmakuLoader implements ILoader { - - private static BiliDanmakuLoader _instance; - - private AndroidFileSource dataSource; - - private Uri uri; - - private BiliDanmakuLoader() { - - } - - public static BiliDanmakuLoader instance() { - if (_instance == null) { - _instance = new BiliDanmakuLoader(); - } - return _instance; - } - - public void load(String uri) throws IllegalDataException { - try { - this.uri = Uri.parse(uri); - dataSource = new AndroidFileSource(uri); - } catch (Exception e) { - throw new IllegalDataException(e); - } - } - - public void load(InputStream stream) { - dataSource = new AndroidFileSource(stream); - } - - @Override - public AndroidFileSource getDataSource() { - return dataSource; - } -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.loader.android; + +import master.flame.danmaku.danmaku.loader.ILoader; +import master.flame.danmaku.danmaku.loader.IllegalDataException; +import master.flame.danmaku.danmaku.parser.android.AndroidFileSource; + +import android.net.Uri; + +import java.io.InputStream; + +public class BiliDanmakuLoader implements ILoader { + + private static BiliDanmakuLoader _instance; + + private AndroidFileSource dataSource; + + private Uri uri; + + private BiliDanmakuLoader() { + + } + + public static BiliDanmakuLoader instance() { + if (_instance == null) { + _instance = new BiliDanmakuLoader(); + } + return _instance; + } + + public void load(String uri) throws IllegalDataException { + try { + this.uri = Uri.parse(uri); + dataSource = new AndroidFileSource(uri); + } catch (Exception e) { + throw new IllegalDataException(e); + } + } + + public void load(InputStream stream) { + dataSource = new AndroidFileSource(stream); + } + + @Override + public AndroidFileSource getDataSource() { + return dataSource; + } +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/android/DanmakuLoaderFactory.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/android/DanmakuLoaderFactory.java index 51fcad45..9608df88 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/android/DanmakuLoaderFactory.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/loader/android/DanmakuLoaderFactory.java @@ -1,34 +1,34 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.loader.android; - -import master.flame.danmaku.danmaku.loader.ILoader; - -public class DanmakuLoaderFactory { - - public static String TAG_BILI = "bili"; - public static String TAG_ACFUN = "acfun"; - - public static ILoader create(String tag) { - if (TAG_BILI.equalsIgnoreCase(tag)) { - return BiliDanmakuLoader.instance(); - } else if(TAG_ACFUN.equalsIgnoreCase(tag)) - return AcFunDanmakuLoader.instance(); - return null; - } - -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.loader.android; + +import master.flame.danmaku.danmaku.loader.ILoader; + +public class DanmakuLoaderFactory { + + public static String TAG_BILI = "bili"; + public static String TAG_ACFUN = "acfun"; + + public static ILoader create(String tag) { + if (TAG_BILI.equalsIgnoreCase(tag)) { + return BiliDanmakuLoader.instance(); + } else if(TAG_ACFUN.equalsIgnoreCase(tag)) + return AcFunDanmakuLoader.instance(); + return null; + } + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/AlphaValue.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/AlphaValue.java index 28d5431d..558d57e5 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/AlphaValue.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/AlphaValue.java @@ -1,10 +1,10 @@ - -package master.flame.danmaku.danmaku.model; - -public class AlphaValue { - - public static int MAX = 255; - - public static int TRANSPARENT = 0; - -} + +package master.flame.danmaku.danmaku.model; + +public class AlphaValue { + + public static int MAX = 255; + + public static int TRANSPARENT = 0; + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/BaseDanmaku.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/BaseDanmaku.java index a994fd97..e0683ab9 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/BaseDanmaku.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/BaseDanmaku.java @@ -1,201 +1,201 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.model; - -public abstract class BaseDanmaku { - - public final static String DANMAKU_BR_CHAR = "/n"; - - public final static int TYPE_SCROLL_RL = 1; - - public final static int TYPE_SCROLL_LR = 6; - - public final static int TYPE_FIX_TOP = 5; - - public final static int TYPE_FIX_BOTTOM = 4; - - public final static int TYPE_SPECIAL = 7; - - public final static int TYPE_MOVEABLE_XXX = 0; // TODO: add more type - - public final static int INVISIBLE = 0; - - public final static int VISIBLE = 1; - - /** - * 显示时间(毫秒) - */ - public long time; - - /** - * 文本 - */ - public String text; - - /** - * 文本颜色 - */ - public int textColor; - - /** - * Z轴角度 - */ - public float rotationZ; - - /** - * Y轴角度 - */ - public float rotationY; - - /** - * 阴影/描边颜色 - */ - public int textShadowColor; - - /** - * 字体大小 - */ - public float textSize = -1; - - /** - * 占位宽度 - */ - public float paintWidth = -1; - - /** - * 占位高度 - */ - public float paintHeight = -1; - - /** - * 存活时间(毫秒) - */ - public long duration; - - /** - * 索引/编号 - */ - public int index; - - /** - * 是否可见 - */ - public int visibility; - - /** - * 绘制用缓存 - */ - public IDrawingCache cache; - - /** - * 计时 - */ - protected DanmakuTimer mTimer; - - /** - * 透明度 - */ - protected int alpha = AlphaValue.MAX; - - private long timer; - - public long getDuration() { - return duration; - } - - public void setDuration(long duration) { - this.duration = duration; - } - - public void draw(IDisplayer displayer) { - displayer.draw(this); - } - - public boolean isMeasured() { - return paintWidth >= 0 && paintHeight >= 0; - } - - public void measure(IDisplayer displayer) { - displayer.measure(this); - } - - public boolean hasDrawingCache() { - return cache != null && cache.get() != null; - } - - public boolean isShown() { - return this.visibility == VISIBLE; - } - - public boolean isTimeOut() { - if (mTimer != null) { - return isTimeOut(mTimer.currMillisecond); - } - return true; - } - - public boolean isTimeOut(long ctime) { - return ctime - time > duration; - } - - public boolean isOutside() { - if (mTimer != null) { - return isOutside(mTimer.currMillisecond); - } - return true; - } - - public boolean isOutside(long ctime) { - return time > ctime || ctime - time > duration; - } - - public void setVisibility(boolean b) { - this.visibility = (b ? VISIBLE : INVISIBLE); - } - - public abstract void layout(IDisplayer displayer, float x, float y); - - public abstract float[] getRectAtTime(IDisplayer displayer, long currTime); - - public abstract float getLeft(); - - public abstract float getTop(); - - public abstract float getRight(); - - public abstract float getBottom(); - - /** - * return the type of Danmaku - * - * @return TYPE_SCROLL_RL = 0 TYPE_SCROLL_RL = 1 TYPE_SCROLL_LR = 2 - * TYPE_FIX_TOP = 3; TYPE_FIX_BOTTOM = 4; - */ - public abstract int getType(); - - public DanmakuTimer getTimer() { - return mTimer; - } - - public void setTimer(DanmakuTimer timer) { - mTimer = timer; - } - - public int getAlpha() { - return alpha; - } -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.model; + +public abstract class BaseDanmaku { + + public final static String DANMAKU_BR_CHAR = "/n"; + + public final static int TYPE_SCROLL_RL = 1; + + public final static int TYPE_SCROLL_LR = 6; + + public final static int TYPE_FIX_TOP = 5; + + public final static int TYPE_FIX_BOTTOM = 4; + + public final static int TYPE_SPECIAL = 7; + + public final static int TYPE_MOVEABLE_XXX = 0; // TODO: add more type + + public final static int INVISIBLE = 0; + + public final static int VISIBLE = 1; + + /** + * 显示时间(毫秒) + */ + public long time; + + /** + * 文本 + */ + public String text; + + /** + * 文本颜色 + */ + public int textColor; + + /** + * Z轴角度 + */ + public float rotationZ; + + /** + * Y轴角度 + */ + public float rotationY; + + /** + * 阴影/描边颜色 + */ + public int textShadowColor; + + /** + * 字体大小 + */ + public float textSize = -1; + + /** + * 占位宽度 + */ + public float paintWidth = -1; + + /** + * 占位高度 + */ + public float paintHeight = -1; + + /** + * 存活时间(毫秒) + */ + public long duration; + + /** + * 索引/编号 + */ + public int index; + + /** + * 是否可见 + */ + public int visibility; + + /** + * 绘制用缓存 + */ + public IDrawingCache cache; + + /** + * 计时 + */ + protected DanmakuTimer mTimer; + + /** + * 透明度 + */ + protected int alpha = AlphaValue.MAX; + + private long timer; + + public long getDuration() { + return duration; + } + + public void setDuration(long duration) { + this.duration = duration; + } + + public void draw(IDisplayer displayer) { + displayer.draw(this); + } + + public boolean isMeasured() { + return paintWidth >= 0 && paintHeight >= 0; + } + + public void measure(IDisplayer displayer) { + displayer.measure(this); + } + + public boolean hasDrawingCache() { + return cache != null && cache.get() != null; + } + + public boolean isShown() { + return this.visibility == VISIBLE; + } + + public boolean isTimeOut() { + if (mTimer != null) { + return isTimeOut(mTimer.currMillisecond); + } + return true; + } + + public boolean isTimeOut(long ctime) { + return ctime - time > duration; + } + + public boolean isOutside() { + if (mTimer != null) { + return isOutside(mTimer.currMillisecond); + } + return true; + } + + public boolean isOutside(long ctime) { + return time > ctime || ctime - time > duration; + } + + public void setVisibility(boolean b) { + this.visibility = (b ? VISIBLE : INVISIBLE); + } + + public abstract void layout(IDisplayer displayer, float x, float y); + + public abstract float[] getRectAtTime(IDisplayer displayer, long currTime); + + public abstract float getLeft(); + + public abstract float getTop(); + + public abstract float getRight(); + + public abstract float getBottom(); + + /** + * return the type of Danmaku + * + * @return TYPE_SCROLL_RL = 0 TYPE_SCROLL_RL = 1 TYPE_SCROLL_LR = 2 + * TYPE_FIX_TOP = 3; TYPE_FIX_BOTTOM = 4; + */ + public abstract int getType(); + + public DanmakuTimer getTimer() { + return mTimer; + } + + public void setTimer(DanmakuTimer timer) { + mTimer = timer; + } + + public int getAlpha() { + return alpha; + } +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/Danmaku.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/Danmaku.java index daf41e77..702fa53c 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/Danmaku.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/Danmaku.java @@ -1,64 +1,64 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.model; - -public class Danmaku extends BaseDanmaku { - - public Danmaku(String text) { - this.text = text; - } - - @Override - public boolean isShown() { - return false; - } - - @Override - public void layout(IDisplayer displayer, float x, float y) { - - } - - @Override - public float[] getRectAtTime(IDisplayer displayer, long time) { - return null; - } - - @Override - public float getLeft() { - return 0; - } - - @Override - public float getTop() { - return 0; - } - - @Override - public float getRight() { - return 0; - } - - @Override - public float getBottom() { - return 0; - } - - @Override - public int getType() { - return 0; - } -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.model; + +public class Danmaku extends BaseDanmaku { + + public Danmaku(String text) { + this.text = text; + } + + @Override + public boolean isShown() { + return false; + } + + @Override + public void layout(IDisplayer displayer, float x, float y) { + + } + + @Override + public float[] getRectAtTime(IDisplayer displayer, long time) { + return null; + } + + @Override + public float getLeft() { + return 0; + } + + @Override + public float getTop() { + return 0; + } + + @Override + public float getRight() { + return 0; + } + + @Override + public float getBottom() { + return 0; + } + + @Override + public int getType() { + return 0; + } +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/DanmakuTimer.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/DanmakuTimer.java index 35faa14b..45db0ef1 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/DanmakuTimer.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/DanmakuTimer.java @@ -1,38 +1,38 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.model; - -public class DanmakuTimer { - public long currMillisecond; - - private long lastInterval; - - public long update(long curr) { - lastInterval = Math.abs(curr - currMillisecond); - currMillisecond = curr; - return lastInterval; - } - - public long add(long mills) { - return update(currMillisecond + mills); - } - - public long lastInterval() { - return lastInterval; - } - -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.model; + +public class DanmakuTimer { + public long currMillisecond; + + private long lastInterval; + + public long update(long curr) { + lastInterval = Math.abs(curr - currMillisecond); + currMillisecond = curr; + return lastInterval; + } + + public long add(long mills) { + return update(currMillisecond + mills); + } + + public long lastInterval() { + return lastInterval; + } + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/FBDanmaku.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/FBDanmaku.java index 5a2ac010..1ec031de 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/FBDanmaku.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/FBDanmaku.java @@ -1,30 +1,30 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.model; - -public class FBDanmaku extends FTDanmaku { - - public FBDanmaku(long duration) { - super(duration); - } - - @Override - public int getType() { - return TYPE_FIX_BOTTOM; - } - -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.model; + +public class FBDanmaku extends FTDanmaku { + + public FBDanmaku(long duration) { + super(duration); + } + + @Override + public int getType() { + return TYPE_FIX_BOTTOM; + } + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/FTDanmaku.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/FTDanmaku.java index c231725f..2cc69858 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/FTDanmaku.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/FTDanmaku.java @@ -1,91 +1,91 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.model; - -/** - * 顶部固定弹幕 - */ -public class FTDanmaku extends BaseDanmaku { - - private float x = 0; - - protected float y = -1; - - public FTDanmaku(long duration) { - this.duration = duration; - } - - @Override - public void layout(IDisplayer displayer, float x, float y) { - if (mTimer != null) { - long deltaDuration = mTimer.currMillisecond - time; - if (deltaDuration >= 0 && deltaDuration <= duration) { - if (this.visibility == INVISIBLE) { - this.x = getLeft(displayer); - this.y = y; - this.visibility = VISIBLE; - } - } else if (deltaDuration > duration) { - this.visibility = INVISIBLE; - } else if (deltaDuration < 0) { - this.visibility = INVISIBLE; - } - } - - } - - protected float getLeft(IDisplayer displayer) { - float left = (displayer.getWidth() - paintWidth) / 2; - return left; - } - - @Override - public float[] getRectAtTime(IDisplayer displayer, long time) { - if (!isMeasured()) - return null; - float left = getLeft(displayer); - float[] rect = new float[] { - left, y, left + paintWidth, y + paintHeight - }; - return rect; - } - - @Override - public float getLeft() { - return x; - } - - @Override - public float getTop() { - return y; - } - - @Override - public float getRight() { - return x + paintWidth; - } - - @Override - public float getBottom() { - return y + paintHeight; - } - - @Override - public int getType() { - return TYPE_FIX_TOP; - } -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.model; + +/** + * 顶部固定弹幕 + */ +public class FTDanmaku extends BaseDanmaku { + + private float x = 0; + + protected float y = -1; + + public FTDanmaku(long duration) { + this.duration = duration; + } + + @Override + public void layout(IDisplayer displayer, float x, float y) { + if (mTimer != null) { + long deltaDuration = mTimer.currMillisecond - time; + if (deltaDuration >= 0 && deltaDuration <= duration) { + if (this.visibility == INVISIBLE) { + this.x = getLeft(displayer); + this.y = y; + this.visibility = VISIBLE; + } + } else if (deltaDuration > duration) { + this.visibility = INVISIBLE; + } else if (deltaDuration < 0) { + this.visibility = INVISIBLE; + } + } + + } + + protected float getLeft(IDisplayer displayer) { + float left = (displayer.getWidth() - paintWidth) / 2; + return left; + } + + @Override + public float[] getRectAtTime(IDisplayer displayer, long time) { + if (!isMeasured()) + return null; + float left = getLeft(displayer); + float[] rect = new float[] { + left, y, left + paintWidth, y + paintHeight + }; + return rect; + } + + @Override + public float getLeft() { + return x; + } + + @Override + public float getTop() { + return y; + } + + @Override + public float getRight() { + return x + paintWidth; + } + + @Override + public float getBottom() { + return y + paintHeight; + } + + @Override + public int getType() { + return TYPE_FIX_TOP; + } +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/IDanmakus.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/IDanmakus.java index 1f56d148..233632d3 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/IDanmakus.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/IDanmakus.java @@ -1,31 +1,31 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.model; - -public interface IDanmakus { - - public void addItem(BaseDanmaku item); - - public void removeItem(BaseDanmaku item); - - public IDanmakus sub(long startTime, long endTime); - - public int size(); - - public void clear(); - -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.model; + +public interface IDanmakus { + + public void addItem(BaseDanmaku item); + + public void removeItem(BaseDanmaku item); + + public IDanmakus sub(long startTime, long endTime); + + public int size(); + + public void clear(); + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/IDisplayer.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/IDisplayer.java index c59f3253..c9fdedf5 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/IDisplayer.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/IDisplayer.java @@ -1,38 +1,38 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.model; - -public interface IDisplayer { - - public abstract int getWidth(); - - public abstract int getHeight(); - - public abstract float getDensity(); - - public abstract int getDensityDpi(); - - public abstract void draw(BaseDanmaku danmaku); - - public abstract float getScaledDensity(); - - /** - * @param danmaku - * @return - */ - public abstract void measure(BaseDanmaku danmaku); -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.model; + +public interface IDisplayer { + + public abstract int getWidth(); + + public abstract int getHeight(); + + public abstract float getDensity(); + + public abstract int getDensityDpi(); + + public abstract void draw(BaseDanmaku danmaku); + + public abstract float getScaledDensity(); + + /** + * @param danmaku + * @return + */ + public abstract void measure(BaseDanmaku danmaku); +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/IDrawingCache.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/IDrawingCache.java index d037a386..c58e5056 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/IDrawingCache.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/IDrawingCache.java @@ -1,14 +1,14 @@ - -package master.flame.danmaku.danmaku.model; - -public interface IDrawingCache { - - public void build(int w, int h, int density); - - public T get(); - - public void destroy(); - - public int size(); - -} + +package master.flame.danmaku.danmaku.model; + +public interface IDrawingCache { + + public void build(int w, int h, int density); + + public T get(); + + public void destroy(); + + public int size(); + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/L2RDanmaku.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/L2RDanmaku.java index ee99f027..b96cb2aa 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/L2RDanmaku.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/L2RDanmaku.java @@ -1,88 +1,88 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.model; - -public class L2RDanmaku extends BaseDanmaku { - - private float x = 0; - - private float y = -1; - - public L2RDanmaku(long duration) { - this.duration = duration; - } - - @Override - public void layout(IDisplayer displayer, float x, float y) { - if (mTimer != null) { - long deltaDuration = mTimer.currMillisecond - time; - if (deltaDuration >= 0 && deltaDuration <= duration) { - this.x = getLeft(displayer, mTimer.currMillisecond); - if (this.visibility == INVISIBLE) { - this.y = y; - this.visibility = VISIBLE; - } - } else if (deltaDuration > duration) { - this.visibility = INVISIBLE; - } else if (deltaDuration < 0) { - this.visibility = INVISIBLE; - } - } - } - - private float getLeft(IDisplayer displayer, long currTime) { - return (currTime - time) / (float) duration * (displayer.getWidth() + paintWidth) - - paintWidth; - } - - @Override - public float[] getRectAtTime(IDisplayer displayer, long time) { - if (!isMeasured()) - return null; - float left = getLeft(displayer, time); - float[] rect = new float[] { - left, y, left + paintWidth, y + paintHeight - }; - return rect; - } - - @Override - public float getLeft() { - return x; - } - - @Override - public float getTop() { - return y; - } - - @Override - public float getRight() { - return x + paintWidth; - } - - @Override - public float getBottom() { - return y + paintHeight; - } - - @Override - public int getType() { - return TYPE_SCROLL_LR; - } - -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.model; + +public class L2RDanmaku extends BaseDanmaku { + + private float x = 0; + + private float y = -1; + + public L2RDanmaku(long duration) { + this.duration = duration; + } + + @Override + public void layout(IDisplayer displayer, float x, float y) { + if (mTimer != null) { + long deltaDuration = mTimer.currMillisecond - time; + if (deltaDuration >= 0 && deltaDuration <= duration) { + this.x = getLeft(displayer, mTimer.currMillisecond); + if (this.visibility == INVISIBLE) { + this.y = y; + this.visibility = VISIBLE; + } + } else if (deltaDuration > duration) { + this.visibility = INVISIBLE; + } else if (deltaDuration < 0) { + this.visibility = INVISIBLE; + } + } + } + + private float getLeft(IDisplayer displayer, long currTime) { + return (currTime - time) / (float) duration * (displayer.getWidth() + paintWidth) + - paintWidth; + } + + @Override + public float[] getRectAtTime(IDisplayer displayer, long time) { + if (!isMeasured()) + return null; + float left = getLeft(displayer, time); + float[] rect = new float[] { + left, y, left + paintWidth, y + paintHeight + }; + return rect; + } + + @Override + public float getLeft() { + return x; + } + + @Override + public float getTop() { + return y; + } + + @Override + public float getRight() { + return x + paintWidth; + } + + @Override + public float getBottom() { + return y + paintHeight; + } + + @Override + public int getType() { + return TYPE_SCROLL_LR; + } + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/RingBuffer.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/RingBuffer.java index 276c50f1..2617b2df 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/RingBuffer.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/RingBuffer.java @@ -1,65 +1,65 @@ - -package master.flame.danmaku.danmaku.model; - -public abstract class RingBuffer { - - T[] mBuffer; - - int mPutIndex = 0; /* 环形缓冲区的当前放入位置 */ - - int mGetIndex = 0; /* 缓冲区的当前取出位置 */ - - int n = 0; /* 环形缓冲区中的元素总数量 */ - - int mCapacity; /* buffer容量 */ - - public RingBuffer(int capacity) { - mCapacity = capacity; - initBuffer(mCapacity); - } - - private void initBuffer(int capacity) { - mBuffer = createBuffer(capacity); - } - - protected abstract T[] createBuffer(int capacity); - - public boolean put(T obj) { - if (n < mCapacity) { - mBuffer[mPutIndex] = obj; - mPutIndex = addring(mPutIndex); - n++; - return true; - } - return false; - } - - private int addring(int i) { - return (i + 1) == mCapacity ? 0 : i + 1; - } - - public T get() { - int pos; - if (n > 0) { - pos = mGetIndex; - mGetIndex = addring(mGetIndex); - n--; - return mBuffer[pos]; - } else { - return null; - } - } - - public int size() { - return n; - } - - public boolean isFull() { - return n == mCapacity; - } - - public boolean isEmpty() { - return n == 0; - } - -} + +package master.flame.danmaku.danmaku.model; + +public abstract class RingBuffer { + + T[] mBuffer; + + int mPutIndex = 0; /* 环形缓冲区的当前放入位置 */ + + int mGetIndex = 0; /* 缓冲区的当前取出位置 */ + + int n = 0; /* 环形缓冲区中的元素总数量 */ + + int mCapacity; /* buffer容量 */ + + public RingBuffer(int capacity) { + mCapacity = capacity; + initBuffer(mCapacity); + } + + private void initBuffer(int capacity) { + mBuffer = createBuffer(capacity); + } + + protected abstract T[] createBuffer(int capacity); + + public boolean put(T obj) { + if (n < mCapacity) { + mBuffer[mPutIndex] = obj; + mPutIndex = addring(mPutIndex); + n++; + return true; + } + return false; + } + + private int addring(int i) { + return (i + 1) == mCapacity ? 0 : i + 1; + } + + public T get() { + int pos; + if (n > 0) { + pos = mGetIndex; + mGetIndex = addring(mGetIndex); + n--; + return mBuffer[pos]; + } else { + return null; + } + } + + public int size() { + return n; + } + + public boolean isFull() { + return n == mCapacity; + } + + public boolean isEmpty() { + return n == 0; + } + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/SpecialDanmaku.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/SpecialDanmaku.java index fb6df37d..40c06ad2 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/SpecialDanmaku.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/SpecialDanmaku.java @@ -1,121 +1,121 @@ - -package master.flame.danmaku.danmaku.model; - -public class SpecialDanmaku extends BaseDanmaku { - - public float beginX, beginY; - - public float endX, endY; - - public float deltaX, deltaY; - - public long translationDuration; - - public long translationStartDelay; - - public int beginAlpha; - - public int endAlpha; - - public int deltaAlpha; - - public long alphaDuration; - - public float rotateX, rotateZ; - - public float pivotX, pivotY; - - private float[] currStateValues = new float[4]; // currX,currY,currAlpha; - - @Override - public void layout(IDisplayer displayer, float x, float y) { - getRectAtTime(displayer, mTimer.currMillisecond); - } - - @Override - public float[] getRectAtTime(IDisplayer displayer, long currTime) { - - if (!isMeasured()) - return null; - - long deltaTime = currTime - time; - - // caculate alpha - alpha = beginAlpha; - if (alphaDuration > 0 && deltaAlpha != 0) { - float alphaProgress = deltaTime / (float) alphaDuration; - int vectorAlpha = (int) (deltaAlpha * alphaProgress); - alpha = beginAlpha + vectorAlpha; - } - - // caculate x y - float currX = beginX; - float currY = beginY; - long dtime = deltaTime - translationStartDelay; - if (translationDuration > 0 && dtime >= 0 && dtime <= translationDuration) { - float tranalationProgress = dtime / (float) translationDuration; - if (deltaX != 0) { - float vectorX = deltaX * tranalationProgress; - currX = beginX + vectorX; - } - if (deltaY != 0) { - float vectorY = deltaY * tranalationProgress; - currY = beginY + vectorY; - } - } - - currStateValues[0] = currX; - currStateValues[1] = currY; - currStateValues[2] = currX + paintWidth; - currStateValues[3] = currY + paintHeight; - - this.visibility = isOutside() ? INVISIBLE : VISIBLE; - - return currStateValues; - } - - @Override - public float getLeft() { - return currStateValues[0]; - } - - @Override - public float getTop() { - return currStateValues[1]; - } - - @Override - public float getRight() { - return currStateValues[2]; - } - - @Override - public float getBottom() { - return currStateValues[3]; - } - - @Override - public int getType() { - return TYPE_SPECIAL; - } - - public void setTranslationData(float beginX, float beginY, float endX, float endY, - long translationDuration, long translationStartDelay) { - this.beginX = beginX; - this.beginY = beginY; - this.endX = endX; - this.endY = endY; - this.deltaX = endX - beginX; - this.deltaY = endY - beginY; - this.translationDuration = translationDuration; - this.translationStartDelay = translationStartDelay; - } - - public void setAlphaData(int beginAlpha, int endAlpha, long alphaDuration) { - this.beginAlpha = beginAlpha; - this.endAlpha = endAlpha; - this.deltaAlpha = endAlpha - beginAlpha; - this.alphaDuration = alphaDuration; - } - -} + +package master.flame.danmaku.danmaku.model; + +public class SpecialDanmaku extends BaseDanmaku { + + public float beginX, beginY; + + public float endX, endY; + + public float deltaX, deltaY; + + public long translationDuration; + + public long translationStartDelay; + + public int beginAlpha; + + public int endAlpha; + + public int deltaAlpha; + + public long alphaDuration; + + public float rotateX, rotateZ; + + public float pivotX, pivotY; + + private float[] currStateValues = new float[4]; // currX,currY,currAlpha; + + @Override + public void layout(IDisplayer displayer, float x, float y) { + getRectAtTime(displayer, mTimer.currMillisecond); + } + + @Override + public float[] getRectAtTime(IDisplayer displayer, long currTime) { + + if (!isMeasured()) + return null; + + long deltaTime = currTime - time; + + // caculate alpha + alpha = beginAlpha; + if (alphaDuration > 0 && deltaAlpha != 0) { + float alphaProgress = deltaTime / (float) alphaDuration; + int vectorAlpha = (int) (deltaAlpha * alphaProgress); + alpha = beginAlpha + vectorAlpha; + } + + // caculate x y + float currX = beginX; + float currY = beginY; + long dtime = deltaTime - translationStartDelay; + if (translationDuration > 0 && dtime >= 0 && dtime <= translationDuration) { + float tranalationProgress = dtime / (float) translationDuration; + if (deltaX != 0) { + float vectorX = deltaX * tranalationProgress; + currX = beginX + vectorX; + } + if (deltaY != 0) { + float vectorY = deltaY * tranalationProgress; + currY = beginY + vectorY; + } + } + + currStateValues[0] = currX; + currStateValues[1] = currY; + currStateValues[2] = currX + paintWidth; + currStateValues[3] = currY + paintHeight; + + this.visibility = isOutside() ? INVISIBLE : VISIBLE; + + return currStateValues; + } + + @Override + public float getLeft() { + return currStateValues[0]; + } + + @Override + public float getTop() { + return currStateValues[1]; + } + + @Override + public float getRight() { + return currStateValues[2]; + } + + @Override + public float getBottom() { + return currStateValues[3]; + } + + @Override + public int getType() { + return TYPE_SPECIAL; + } + + public void setTranslationData(float beginX, float beginY, float endX, float endY, + long translationDuration, long translationStartDelay) { + this.beginX = beginX; + this.beginY = beginY; + this.endX = endX; + this.endY = endY; + this.deltaX = endX - beginX; + this.deltaY = endY - beginY; + this.translationDuration = translationDuration; + this.translationStartDelay = translationStartDelay; + } + + public void setAlphaData(int beginAlpha, int endAlpha, long alphaDuration) { + this.beginAlpha = beginAlpha; + this.endAlpha = endAlpha; + this.deltaAlpha = endAlpha - beginAlpha; + this.alphaDuration = alphaDuration; + } + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/Danmakus.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/Danmakus.java index e2aff9d2..d995d8a0 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/Danmakus.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/Danmakus.java @@ -1,212 +1,212 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.model.android; - -import java.util.*; - -import master.flame.danmaku.danmaku.model.BaseDanmaku; -import master.flame.danmaku.danmaku.model.Danmaku; -import master.flame.danmaku.danmaku.model.IDanmakus; - -public class Danmakus implements IDanmakus { - - public static final int ST_BY_TIME = 0; - - public static final int ST_BY_YPOS = 1; - - public static final int ST_BY_YPOS_DESC = 2; - - public Set items; - - private Danmakus subItems; - - private BaseDanmaku startItem, endItem; - - public Danmakus() { - this(ST_BY_TIME); - } - - public Danmakus(int sortType) { - Comparator comparator = null; - if (sortType == ST_BY_TIME) { - comparator = new TimeComparator(); - } else if (sortType == ST_BY_YPOS) { - comparator = new YPosComparator(); - } else if (sortType == ST_BY_YPOS_DESC) { - comparator = new YposDescComparator(); - } - items = new TreeSet(comparator); - } - - public Danmakus(Set items) { - setItems(items); - } - - public void setItems(Set items) { - Set oldItems = this.items; - this.items = items; - if (oldItems != null) { - Iterator it = oldItems.iterator(); - while (it.hasNext()) { - BaseDanmaku item = it.next(); - if (item.isOutside()) { - item.setVisibility(false); - } else { - break; - } - } - } - - } - - public Iterator iterator() { - if (items != null) { - return items.iterator(); - } - return null; - } - - @Override - public void addItem(BaseDanmaku item) { - if (items != null) - items.add(item); - } - - @Override - public void removeItem(BaseDanmaku item) { - if (item.isOutside()) { - item.setVisibility(false); - } - if (items != null) { - items.remove(item); - } - } - - @Override - public IDanmakus sub(long startTime, long endTime) { - if (subItems == null) { - subItems = new Danmakus(); - } - if (startItem == null) { - startItem = createItem("start"); - } - if (endItem == null) { - endItem = createItem("end"); - } - - if (startTime >= startItem.time && endTime <= endItem.time && subItems != null) { - return subItems; - } - - startItem.time = startTime; - endItem.time = endTime; - subItems.setItems(((SortedSet) items).subSet(startItem, endItem)); - return subItems; - } - - private BaseDanmaku createItem(String text) { - return new Danmaku(text); - } - - public int size() { - if (items != null) { - return items.size(); - } - return 0; - } - - @Override - public void clear() { - if (items != null) - items.clear(); - if (subItems != null) { - Iterator it = subItems.iterator(); - while (it.hasNext()) { - BaseDanmaku item = it.next(); - item.setVisibility(false); - } - subItems.clear(); - } - } - - private class TimeComparator implements Comparator { - - @Override - public int compare(BaseDanmaku obj1, BaseDanmaku obj2) { - long val = obj1.time - obj2.time; - if (val > 0) { - return 1; - } else if (val < 0) { - return -1; - } - - Integer t1 = obj1.getType(); - Integer t2 = obj2.getType(); - int result = t1.compareTo(t2); - if (result != 0) { - return result; - } - - if (obj1.text == obj2.text) { - return 0; - } - if (obj1.text == null) { - return -1; - } - if (obj2.text == null) { - return 1; - } - return obj1.text.compareTo(obj2.text); - } - } - - private class YPosComparator implements Comparator { - - @Override - public int compare(BaseDanmaku obj1, BaseDanmaku obj2) { - int result = Float.compare(obj1.getTop(), obj2.getTop()); - if (result != 0) { - return result; - } - long val = obj1.time - obj2.time; - if (val > 0) { - result = 1; - } else if (val < 0) { - result = -1; - } - return result; - } - } - - private class YposDescComparator implements Comparator { - @Override - public int compare(BaseDanmaku obj1, BaseDanmaku obj2) { - - int result = Float.compare(obj2.getTop(), obj1.getTop()); - if (result != 0) { - return result; - } - long val = obj1.time - obj2.time; - if (val > 0) { - result = 1; - } else if (val < 0) { - result = -1; - } - return result; - } - } -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.model.android; + +import java.util.*; + +import master.flame.danmaku.danmaku.model.BaseDanmaku; +import master.flame.danmaku.danmaku.model.Danmaku; +import master.flame.danmaku.danmaku.model.IDanmakus; + +public class Danmakus implements IDanmakus { + + public static final int ST_BY_TIME = 0; + + public static final int ST_BY_YPOS = 1; + + public static final int ST_BY_YPOS_DESC = 2; + + public Set items; + + private Danmakus subItems; + + private BaseDanmaku startItem, endItem; + + public Danmakus() { + this(ST_BY_TIME); + } + + public Danmakus(int sortType) { + Comparator comparator = null; + if (sortType == ST_BY_TIME) { + comparator = new TimeComparator(); + } else if (sortType == ST_BY_YPOS) { + comparator = new YPosComparator(); + } else if (sortType == ST_BY_YPOS_DESC) { + comparator = new YposDescComparator(); + } + items = new TreeSet(comparator); + } + + public Danmakus(Set items) { + setItems(items); + } + + public void setItems(Set items) { + Set oldItems = this.items; + this.items = items; + if (oldItems != null) { + Iterator it = oldItems.iterator(); + while (it.hasNext()) { + BaseDanmaku item = it.next(); + if (item.isOutside()) { + item.setVisibility(false); + } else { + break; + } + } + } + + } + + public Iterator iterator() { + if (items != null) { + return items.iterator(); + } + return null; + } + + @Override + public void addItem(BaseDanmaku item) { + if (items != null) + items.add(item); + } + + @Override + public void removeItem(BaseDanmaku item) { + if (item.isOutside()) { + item.setVisibility(false); + } + if (items != null) { + items.remove(item); + } + } + + @Override + public IDanmakus sub(long startTime, long endTime) { + if (subItems == null) { + subItems = new Danmakus(); + } + if (startItem == null) { + startItem = createItem("start"); + } + if (endItem == null) { + endItem = createItem("end"); + } + + if (startTime >= startItem.time && endTime <= endItem.time && subItems != null) { + return subItems; + } + + startItem.time = startTime; + endItem.time = endTime; + subItems.setItems(((SortedSet) items).subSet(startItem, endItem)); + return subItems; + } + + private BaseDanmaku createItem(String text) { + return new Danmaku(text); + } + + public int size() { + if (items != null) { + return items.size(); + } + return 0; + } + + @Override + public void clear() { + if (items != null) + items.clear(); + if (subItems != null) { + Iterator it = subItems.iterator(); + while (it.hasNext()) { + BaseDanmaku item = it.next(); + item.setVisibility(false); + } + subItems.clear(); + } + } + + private class TimeComparator implements Comparator { + + @Override + public int compare(BaseDanmaku obj1, BaseDanmaku obj2) { + long val = obj1.time - obj2.time; + if (val > 0) { + return 1; + } else if (val < 0) { + return -1; + } + + Integer t1 = obj1.getType(); + Integer t2 = obj2.getType(); + int result = t1.compareTo(t2); + if (result != 0) { + return result; + } + + if (obj1.text == obj2.text) { + return 0; + } + if (obj1.text == null) { + return -1; + } + if (obj2.text == null) { + return 1; + } + return obj1.text.compareTo(obj2.text); + } + } + + private class YPosComparator implements Comparator { + + @Override + public int compare(BaseDanmaku obj1, BaseDanmaku obj2) { + int result = Float.compare(obj1.getTop(), obj2.getTop()); + if (result != 0) { + return result; + } + long val = obj1.time - obj2.time; + if (val > 0) { + result = 1; + } else if (val < 0) { + result = -1; + } + return result; + } + } + + private class YposDescComparator implements Comparator { + @Override + public int compare(BaseDanmaku obj1, BaseDanmaku obj2) { + + int result = Float.compare(obj2.getTop(), obj1.getTop()); + if (result != 0) { + return result; + } + long val = obj1.time - obj2.time; + if (val > 0) { + result = 1; + } else if (val < 0) { + result = -1; + } + return result; + } + } +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/DrawingCache.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/DrawingCache.java index 2227030c..3042f71e 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/DrawingCache.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/DrawingCache.java @@ -1,76 +1,76 @@ - -package master.flame.danmaku.danmaku.model.android; - -import master.flame.danmaku.danmaku.model.IDrawingCache; -import master.flame.danmaku.danmaku.model.objectpool.Poolable; - -public class DrawingCache implements IDrawingCache, Poolable { - - private DrawingCacheHolder mHolder; - - private int mSize = 0; - - private DrawingCache mNextElement; - - private boolean mIsPooled; - - public DrawingCache() { - mHolder = new DrawingCacheHolder(); - } - - @Override - public void build(int w, int h, int density) { - DrawingCacheHolder holder = mHolder; - if (holder == null) { - holder = new DrawingCacheHolder(w, h, density); - } else { - holder.buildCache(w, h, density); - } - mHolder = holder; - mSize = mHolder.bitmap.getRowBytes() * mHolder.bitmap.getHeight(); - } - - @Override - public DrawingCacheHolder get() { - if (mHolder == null || mHolder.bitmap == null) { - return null; - } - return mHolder; - } - - @Override - public void destroy() { - if (mHolder != null) { - mHolder.recycle(); - } - mSize = 0; - } - - @Override - public int size() { - if (mHolder != null) { - return mSize; - } - return 0; - } - - @Override - public void setNextPoolable(DrawingCache element) { - mNextElement = element; - } - - @Override - public DrawingCache getNextPoolable() { - return mNextElement; - } - - @Override - public boolean isPooled() { - return mIsPooled; - } - - @Override - public void setPooled(boolean isPooled) { - mIsPooled = isPooled; - } -} + +package master.flame.danmaku.danmaku.model.android; + +import master.flame.danmaku.danmaku.model.IDrawingCache; +import master.flame.danmaku.danmaku.model.objectpool.Poolable; + +public class DrawingCache implements IDrawingCache, Poolable { + + private DrawingCacheHolder mHolder; + + private int mSize = 0; + + private DrawingCache mNextElement; + + private boolean mIsPooled; + + public DrawingCache() { + mHolder = new DrawingCacheHolder(); + } + + @Override + public void build(int w, int h, int density) { + DrawingCacheHolder holder = mHolder; + if (holder == null) { + holder = new DrawingCacheHolder(w, h, density); + } else { + holder.buildCache(w, h, density); + } + mHolder = holder; + mSize = mHolder.bitmap.getRowBytes() * mHolder.bitmap.getHeight(); + } + + @Override + public DrawingCacheHolder get() { + if (mHolder == null || mHolder.bitmap == null) { + return null; + } + return mHolder; + } + + @Override + public void destroy() { + if (mHolder != null) { + mHolder.recycle(); + } + mSize = 0; + } + + @Override + public int size() { + if (mHolder != null) { + return mSize; + } + return 0; + } + + @Override + public void setNextPoolable(DrawingCache element) { + mNextElement = element; + } + + @Override + public DrawingCache getNextPoolable() { + return mNextElement; + } + + @Override + public boolean isPooled() { + return mIsPooled; + } + + @Override + public void setPooled(boolean isPooled) { + mIsPooled = isPooled; + } +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/DrawingCacheHolder.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/DrawingCacheHolder.java index adb02a12..726c1064 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/DrawingCacheHolder.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/DrawingCacheHolder.java @@ -1,70 +1,70 @@ - -package master.flame.danmaku.danmaku.model.android; - -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; - -public class DrawingCacheHolder { - - public Canvas canvas; - - public Bitmap bitmap; - - public Object extra; - - public int width; - - public int height; - - public boolean drawn; - - private int mDensity; - - public DrawingCacheHolder() { - - } - - public DrawingCacheHolder(int w, int h) { - buildCache(w, h, 0); - } - - public void buildCache(int w, int h, int density) { - if (w == width && h == height && bitmap != null && !bitmap.isRecycled()) { - bitmap.eraseColor(Color.TRANSPARENT); - return; - } - if (bitmap != null) { - recycle(); - } - width = w; - height = h; - bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); - if (density > 0) { - mDensity = density; - bitmap.setDensity(density); - } - if (canvas == null) - canvas = new Canvas(bitmap); - else - canvas.setBitmap(bitmap); - } - - public void recycle() { - width = height = 0; - if (canvas != null) { - canvas = null; - } - if (bitmap != null) { - bitmap.recycle(); - bitmap = null; - } - extra = null; - } - - public DrawingCacheHolder(int w, int h, int density) { - mDensity = density; - buildCache(w, h, density); - } - -} + +package master.flame.danmaku.danmaku.model.android; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; + +public class DrawingCacheHolder { + + public Canvas canvas; + + public Bitmap bitmap; + + public Object extra; + + public int width; + + public int height; + + public boolean drawn; + + private int mDensity; + + public DrawingCacheHolder() { + + } + + public DrawingCacheHolder(int w, int h) { + buildCache(w, h, 0); + } + + public void buildCache(int w, int h, int density) { + if (w == width && h == height && bitmap != null && !bitmap.isRecycled()) { + bitmap.eraseColor(Color.TRANSPARENT); + return; + } + if (bitmap != null) { + recycle(); + } + width = w; + height = h; + bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); + if (density > 0) { + mDensity = density; + bitmap.setDensity(density); + } + if (canvas == null) + canvas = new Canvas(bitmap); + else + canvas.setBitmap(bitmap); + } + + public void recycle() { + width = height = 0; + if (canvas != null) { + canvas = null; + } + if (bitmap != null) { + bitmap.recycle(); + bitmap = null; + } + extra = null; + } + + public DrawingCacheHolder(int w, int h, int density) { + mDensity = density; + buildCache(w, h, density); + } + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/DrawingCachePoolManager.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/DrawingCachePoolManager.java index 47bf2abf..378f2bf9 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/DrawingCachePoolManager.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/model/android/DrawingCachePoolManager.java @@ -1,23 +1,23 @@ - -package master.flame.danmaku.danmaku.model.android; - -import master.flame.danmaku.danmaku.model.objectpool.PoolableManager; - -public class DrawingCachePoolManager implements PoolableManager { - - @Override - public DrawingCache newInstance() { - return null; - } - - @Override - public void onAcquired(DrawingCache element) { - - } - - @Override - public void onReleased(DrawingCache element) { - - } - -} + +package master.flame.danmaku.danmaku.model.android; + +import master.flame.danmaku.danmaku.model.objectpool.PoolableManager; + +public class DrawingCachePoolManager implements PoolableManager { + + @Override + public DrawingCache newInstance() { + return null; + } + + @Override + public void onAcquired(DrawingCache element) { + + } + + @Override + public void onReleased(DrawingCache element) { + + } + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/BaseDanmakuParser.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/BaseDanmakuParser.java index 71df3b35..9578a028 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/BaseDanmakuParser.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/BaseDanmakuParser.java @@ -1,53 +1,54 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.parser; - -import master.flame.danmaku.danmaku.model.DanmakuTimer; -import master.flame.danmaku.danmaku.model.IDisplayer; -import master.flame.danmaku.danmaku.model.android.Danmakus; - -/** - * - */ -public abstract class BaseDanmakuParser { - protected IDataSource mDataSource; - - protected DanmakuTimer mTimer; - protected int mDispWidth; - protected int mDispHeight; - protected float mDispDensity; - protected float mScaledDensity; - - public BaseDanmakuParser(IDisplayer disp) { - mDispWidth = disp.getWidth(); - mDispHeight = disp.getHeight(); - mDispDensity = disp.getDensity(); - mScaledDensity = disp.getScaledDensity(); - } - - public BaseDanmakuParser load(IDataSource source) { - mDataSource = source; - return this; - } - public BaseDanmakuParser setTimer(DanmakuTimer timer){ - mTimer = timer; - return this; - } - - public abstract Danmakus parse(); - -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.parser; + +import master.flame.danmaku.danmaku.model.DanmakuTimer; +import master.flame.danmaku.danmaku.model.IDisplayer; +import master.flame.danmaku.danmaku.model.android.Danmakus; + +/** + * + */ +public abstract class BaseDanmakuParser { + protected IDataSource mDataSource; + + protected DanmakuTimer mTimer; + protected int mDispWidth; + protected int mDispHeight; + protected float mDispDensity; + protected float mScaledDensity; + + public BaseDanmakuParser setDisp(IDisplayer disp){ + mDispWidth = disp.getWidth(); + mDispHeight = disp.getHeight(); + mDispDensity = disp.getDensity(); + mScaledDensity = disp.getScaledDensity(); + return this; + } + + public BaseDanmakuParser load(IDataSource source) { + mDataSource = source; + return this; + } + public BaseDanmakuParser setTimer(DanmakuTimer timer){ + mTimer = timer; + return this; + } + + public abstract Danmakus parse(); + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/IDataSource.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/IDataSource.java index 1053dee0..e6d13498 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/IDataSource.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/IDataSource.java @@ -1,28 +1,28 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.parser; - -public interface IDataSource { - String SCHEME_HTTP_TAG = "http"; - String SCHEME_HTTPS_TAG = "https"; - String SCHEME_FILE_TAG = "file"; - - public T data(); - - public void release(); - -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.parser; + +public interface IDataSource { + String SCHEME_HTTP_TAG = "http"; + String SCHEME_HTTPS_TAG = "https"; + String SCHEME_FILE_TAG = "file"; + + public T data(); + + public void release(); + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/AcFunDanmakuParser.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/AcFunDanmakuParser.java index 797fbe5a..0fe10a45 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/AcFunDanmakuParser.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/AcFunDanmakuParser.java @@ -1,68 +1,64 @@ - -package master.flame.danmaku.danmaku.parser.android; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import android.graphics.Color; - -import master.flame.danmaku.danmaku.model.BaseDanmaku; -import master.flame.danmaku.danmaku.model.IDisplayer; -import master.flame.danmaku.danmaku.model.android.Danmakus; -import master.flame.danmaku.danmaku.parser.BaseDanmakuParser; -import master.flame.danmaku.danmaku.parser.DanmakuFactory; - -public class AcFunDanmakuParser extends BaseDanmakuParser { - - public AcFunDanmakuParser(IDisplayer disp) { - super(disp); - } - - @Override - public Danmakus parse() { - if (mDataSource != null && mDataSource instanceof JSONSource) { - JSONSource jsonSource = (JSONSource) mDataSource; - return _parse(jsonSource.data()); - } - return null; - } - - private Danmakus _parse(JSONArray jsonArray) { - Danmakus danmakus = null; - if (jsonArray != null && jsonArray.length() > 0) - danmakus = new Danmakus(); - for (int i = 0; i < jsonArray.length(); i++) { - try { - JSONObject obj = jsonArray.getJSONObject(i); - String c = obj.getString("c"); - String[] values = c.split(","); - if (values.length > 0) { - int type = Integer.parseInt(values[2]); // 弹幕类型 - if (type == 7) - // FIXME : hard code - // TODO : parse advance danmaku json - continue; - long time = (long) (Float.parseFloat(values[0]) * 1000); // 出现时间 - int color = Integer.parseInt(values[1]) | 0xFF000000; // 颜色 - float textSize = Float.parseFloat(values[3]); // 字体大小 - BaseDanmaku item = DanmakuFactory.createDanmaku(type, mDispWidth); - if (item != null) { - item.time = time; - item.textSize = textSize * (mScaledDensity - 0.2f); - item.textColor = color; - item.textShadowColor = color <= Color.BLACK ? Color.WHITE : Color.BLACK; - item.text = obj.optString("m", "...."); - item.index = i; - item.setTimer(mTimer); - danmakus.addItem(item); - } - } - - } catch (JSONException e) { - } - } - - return danmakus; - } -} + +package master.flame.danmaku.danmaku.parser.android; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import android.graphics.Color; + +import master.flame.danmaku.danmaku.model.BaseDanmaku; +import master.flame.danmaku.danmaku.model.IDisplayer; +import master.flame.danmaku.danmaku.model.android.Danmakus; +import master.flame.danmaku.danmaku.parser.BaseDanmakuParser; +import master.flame.danmaku.danmaku.parser.DanmakuFactory; + +public class AcFunDanmakuParser extends BaseDanmakuParser { + + @Override + public Danmakus parse() { + if (mDataSource != null && mDataSource instanceof JSONSource) { + JSONSource jsonSource = (JSONSource) mDataSource; + return _parse(jsonSource.data()); + } + return null; + } + + private Danmakus _parse(JSONArray jsonArray) { + Danmakus danmakus = null; + if (jsonArray != null && jsonArray.length() > 0) + danmakus = new Danmakus(); + for (int i = 0; i < jsonArray.length(); i++) { + try { + JSONObject obj = jsonArray.getJSONObject(i); + String c = obj.getString("c"); + String[] values = c.split(","); + if (values.length > 0) { + int type = Integer.parseInt(values[2]); // 弹幕类型 + if (type == 7) + // FIXME : hard code + // TODO : parse advance danmaku json + continue; + long time = (long) (Float.parseFloat(values[0]) * 1000); // 出现时间 + int color = Integer.parseInt(values[1]) | 0xFF000000; // 颜色 + float textSize = Float.parseFloat(values[3]); // 字体大小 + BaseDanmaku item = DanmakuFactory.createDanmaku(type, mDispWidth); + if (item != null) { + item.time = time; + item.textSize = textSize * (mScaledDensity - 0.2f); + item.textColor = color; + item.textShadowColor = color <= Color.BLACK ? Color.WHITE : Color.BLACK; + item.text = obj.optString("m", "...."); + item.index = i; + item.setTimer(mTimer); + danmakus.addItem(item); + } + } + + } catch (JSONException e) { + } + } + + return danmakus; + } +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/AndroidFileSource.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/AndroidFileSource.java index a7ff8717..576d8919 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/AndroidFileSource.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/AndroidFileSource.java @@ -1,90 +1,90 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.parser.android; - -import master.flame.danmaku.danmaku.parser.IDataSource; -import master.flame.danmaku.danmaku.util.IOUtils; - -import android.net.Uri; - -import java.io.*; -import java.net.MalformedURLException; -import java.net.URL; - -public class AndroidFileSource implements IDataSource { - - private InputStream inStream; - - public AndroidFileSource(String filepath) { - fillStreamFromFile(new File(filepath)); - } - - public AndroidFileSource(Uri uri) { - fillStreamFromUri(uri); - } - - public AndroidFileSource(File file) { - fillStreamFromFile(file); - } - - public AndroidFileSource(InputStream stream) { - this.inStream = stream; - } - - public void fillStreamFromFile(File file) { - try { - inStream = new BufferedInputStream(new FileInputStream(file)); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - } - - public void fillStreamFromUri(Uri uri) { - String scheme = uri.getScheme(); - if (SCHEME_HTTP_TAG.equalsIgnoreCase(scheme) || SCHEME_HTTPS_TAG.equalsIgnoreCase(scheme)) { - fillStreamFromHttpFile(uri); - } else if (SCHEME_FILE_TAG.equalsIgnoreCase(scheme)) { - fillStreamFromFile(new File(uri.getPath())); - } - } - - public void fillStreamFromHttpFile(Uri uri) { - try { - URL url = new URL(uri.getPath()); - url.openConnection(); - inStream = new BufferedInputStream(url.openStream()); - - } catch (MalformedURLException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - - } - - @Override - public void release() { - IOUtils.closeQuietly(inStream); - inStream = null; - } - - @Override - public InputStream data() { - return inStream; - } - -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.parser.android; + +import master.flame.danmaku.danmaku.parser.IDataSource; +import master.flame.danmaku.danmaku.util.IOUtils; + +import android.net.Uri; + +import java.io.*; +import java.net.MalformedURLException; +import java.net.URL; + +public class AndroidFileSource implements IDataSource { + + private InputStream inStream; + + public AndroidFileSource(String filepath) { + fillStreamFromFile(new File(filepath)); + } + + public AndroidFileSource(Uri uri) { + fillStreamFromUri(uri); + } + + public AndroidFileSource(File file) { + fillStreamFromFile(file); + } + + public AndroidFileSource(InputStream stream) { + this.inStream = stream; + } + + public void fillStreamFromFile(File file) { + try { + inStream = new BufferedInputStream(new FileInputStream(file)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + + public void fillStreamFromUri(Uri uri) { + String scheme = uri.getScheme(); + if (SCHEME_HTTP_TAG.equalsIgnoreCase(scheme) || SCHEME_HTTPS_TAG.equalsIgnoreCase(scheme)) { + fillStreamFromHttpFile(uri); + } else if (SCHEME_FILE_TAG.equalsIgnoreCase(scheme)) { + fillStreamFromFile(new File(uri.getPath())); + } + } + + public void fillStreamFromHttpFile(Uri uri) { + try { + URL url = new URL(uri.getPath()); + url.openConnection(); + inStream = new BufferedInputStream(url.openStream()); + + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + @Override + public void release() { + IOUtils.closeQuietly(inStream); + inStream = null; + } + + @Override + public InputStream data() { + return inStream; + } + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/BiliDanmukuParser.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/BiliDanmukuParser.java index 4ce3cc92..0aa44623 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/BiliDanmukuParser.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/BiliDanmukuParser.java @@ -34,10 +34,6 @@ public class BiliDanmukuParser extends BaseDanmakuParser { - public BiliDanmukuParser(IDisplayer disp) { - super(disp); - } - static { System.setProperty("org.xml.sax.driver", "org.xmlpull.v1.sax2.Driver"); } diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/JSONSource.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/JSONSource.java index 26f3c2c2..d588b29d 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/JSONSource.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/parser/android/JSONSource.java @@ -1,74 +1,74 @@ -package master.flame.danmaku.danmaku.parser.android; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; - -import master.flame.danmaku.danmaku.parser.IDataSource; -import master.flame.danmaku.danmaku.util.IOUtils; - -import org.json.JSONArray; -import org.json.JSONException; - -import android.net.Uri; -import android.text.TextUtils; - -/** - * a json file source - * @author yrom - */ -public class JSONSource implements IDataSource{ - private JSONArray mJSONArray; - private InputStream mInput; - public JSONSource(String json) throws JSONException{ - init(json); - } - - public JSONSource(InputStream in) throws JSONException{ - init(in); - } - - private void init(InputStream in) throws JSONException { - if(in == null) - throw new NullPointerException("input stream cannot be null!"); - mInput = in; - String json = IOUtils.getString(mInput); - init(json); - } - - public JSONSource(URL url) throws JSONException, IOException{ - this(url.openStream()); - } - - public JSONSource(File file) throws FileNotFoundException, JSONException{ - init(new FileInputStream(file)); - } - - public JSONSource(Uri uri) throws IOException, JSONException { - String scheme = uri.getScheme(); - if (SCHEME_HTTP_TAG.equalsIgnoreCase(scheme) || SCHEME_HTTPS_TAG.equalsIgnoreCase(scheme)) { - init(new URL(uri.getPath()).openStream()); - } else if (SCHEME_FILE_TAG.equalsIgnoreCase(scheme)) { - init(new FileInputStream(uri.getPath())); - } - } - - private void init(String json) throws JSONException { - if(!TextUtils.isEmpty(json)){ - mJSONArray = new JSONArray(json); - } - } - public JSONArray data(){ - return mJSONArray; - } - - @Override - public void release() { - IOUtils.closeQuietly(mInput); - mInput = null; - } - -} +package master.flame.danmaku.danmaku.parser.android; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import master.flame.danmaku.danmaku.parser.IDataSource; +import master.flame.danmaku.danmaku.util.IOUtils; + +import org.json.JSONArray; +import org.json.JSONException; + +import android.net.Uri; +import android.text.TextUtils; + +/** + * a json file source + * @author yrom + */ +public class JSONSource implements IDataSource{ + private JSONArray mJSONArray; + private InputStream mInput; + public JSONSource(String json) throws JSONException{ + init(json); + } + + public JSONSource(InputStream in) throws JSONException{ + init(in); + } + + private void init(InputStream in) throws JSONException { + if(in == null) + throw new NullPointerException("input stream cannot be null!"); + mInput = in; + String json = IOUtils.getString(mInput); + init(json); + } + + public JSONSource(URL url) throws JSONException, IOException{ + this(url.openStream()); + } + + public JSONSource(File file) throws FileNotFoundException, JSONException{ + init(new FileInputStream(file)); + } + + public JSONSource(Uri uri) throws IOException, JSONException { + String scheme = uri.getScheme(); + if (SCHEME_HTTP_TAG.equalsIgnoreCase(scheme) || SCHEME_HTTPS_TAG.equalsIgnoreCase(scheme)) { + init(new URL(uri.getPath()).openStream()); + } else if (SCHEME_FILE_TAG.equalsIgnoreCase(scheme)) { + init(new FileInputStream(uri.getPath())); + } + } + + private void init(String json) throws JSONException { + if(!TextUtils.isEmpty(json)){ + mJSONArray = new JSONArray(json); + } + } + public JSONArray data(){ + return mJSONArray; + } + + @Override + public void release() { + IOUtils.closeQuietly(mInput); + mInput = null; + } + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/renderer/IRenderer.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/renderer/IRenderer.java index ce7003ad..3961b750 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/renderer/IRenderer.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/renderer/IRenderer.java @@ -1,28 +1,28 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.renderer; - -import master.flame.danmaku.danmaku.model.IDanmakus; -import master.flame.danmaku.danmaku.model.IDisplayer; - -public interface IRenderer { - - public void draw(IDisplayer disp, IDanmakus danmakus); - - public void clear(); - -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.renderer; + +import master.flame.danmaku.danmaku.model.IDanmakus; +import master.flame.danmaku.danmaku.model.IDisplayer; + +public interface IRenderer { + + public void draw(IDisplayer disp, IDanmakus danmakus); + + public void clear(); + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/renderer/Renderer.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/renderer/Renderer.java index 43e1f779..71a386f6 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/renderer/Renderer.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/renderer/Renderer.java @@ -1,21 +1,21 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.renderer; - -public abstract class Renderer implements IRenderer { - -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.renderer; + +public abstract class Renderer implements IRenderer { + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/renderer/android/DanmakuRenderer.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/renderer/android/DanmakuRenderer.java index 764fc72c..05d0378d 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/renderer/android/DanmakuRenderer.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/renderer/android/DanmakuRenderer.java @@ -1,65 +1,65 @@ -/* - * Copyright (C) 2013 Chen Hui - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package master.flame.danmaku.danmaku.renderer.android; - -import master.flame.danmaku.danmaku.model.BaseDanmaku; -import master.flame.danmaku.danmaku.model.IDanmakus; -import master.flame.danmaku.danmaku.model.IDisplayer; -import master.flame.danmaku.danmaku.model.android.Danmakus; -import master.flame.danmaku.danmaku.renderer.Renderer; - -import java.util.Iterator; - -public class DanmakuRenderer extends Renderer { - - public static int ANTI_ALIAS_DISABLE_SIZE = 30; - - public static int ANTI_ALIAS_ENABLE_SIZE = 5; - - @Override - public void draw(IDisplayer disp, IDanmakus danmakus) { - Danmakus drawItems = (Danmakus) danmakus; - Iterator itr = drawItems.iterator(); - - while (itr.hasNext()) { - - BaseDanmaku drawItem = itr.next(); - - // measure - if (!drawItem.isMeasured()) { - drawItem.measure(disp); - } - - // layout - DanmakusRetainer.fix(drawItem, disp); - - // draw - if (drawItem.isShown() && drawItem.getLeft() < disp.getWidth() && drawItem.getRight() > 0) { - - drawItem.draw(disp); - - } - - } - } - - @Override - public void clear() { - DanmakusRetainer.clear(); - } - -} +/* + * Copyright (C) 2013 Chen Hui + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package master.flame.danmaku.danmaku.renderer.android; + +import master.flame.danmaku.danmaku.model.BaseDanmaku; +import master.flame.danmaku.danmaku.model.IDanmakus; +import master.flame.danmaku.danmaku.model.IDisplayer; +import master.flame.danmaku.danmaku.model.android.Danmakus; +import master.flame.danmaku.danmaku.renderer.Renderer; + +import java.util.Iterator; + +public class DanmakuRenderer extends Renderer { + + public static int ANTI_ALIAS_DISABLE_SIZE = 30; + + public static int ANTI_ALIAS_ENABLE_SIZE = 5; + + @Override + public void draw(IDisplayer disp, IDanmakus danmakus) { + Danmakus drawItems = (Danmakus) danmakus; + Iterator itr = drawItems.iterator(); + + while (itr.hasNext()) { + + BaseDanmaku drawItem = itr.next(); + + // measure + if (!drawItem.isMeasured()) { + drawItem.measure(disp); + } + + // layout + DanmakusRetainer.fix(drawItem, disp); + + // draw + if (drawItem.isShown() && drawItem.getLeft() < disp.getWidth() && drawItem.getRight() > 0) { + + drawItem.draw(disp); + + } + + } + } + + @Override + public void clear() { + DanmakusRetainer.clear(); + } + +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/util/AndroidCounter.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/util/AndroidCounter.java index 1e2232e4..34ea9c11 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/util/AndroidCounter.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/util/AndroidCounter.java @@ -1,35 +1,35 @@ - -package master.flame.danmaku.danmaku.util; - -import android.util.Log; - -public class AndroidCounter { - - private long counter = 0; - - public AndroidCounter() { - } - - public AndroidCounter begin() { - - counter = System.currentTimeMillis(); - - return this; - } - - public AndroidCounter end() { - - counter = System.currentTimeMillis() - counter; - - return this; - } - - public long getDuration() { - return counter; - } - - public void log(String title) { - - Log.e(title, Long.toString(counter) + " ms"); - } -} + +package master.flame.danmaku.danmaku.util; + +import android.util.Log; + +public class AndroidCounter { + + private long counter = 0; + + public AndroidCounter() { + } + + public AndroidCounter begin() { + + counter = System.currentTimeMillis(); + + return this; + } + + public AndroidCounter end() { + + counter = System.currentTimeMillis() - counter; + + return this; + } + + public long getDuration() { + return counter; + } + + public void log(String title) { + + Log.e(title, Long.toString(counter) + " ms"); + } +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/util/IOUtils.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/util/IOUtils.java index c11a4151..8a0e4e7f 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/util/IOUtils.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/danmaku/util/IOUtils.java @@ -1,42 +1,42 @@ -package master.flame.danmaku.danmaku.util; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -/** - * Created by Yrom on 13-8-11. - */ -public class IOUtils { - public static String getString(InputStream in){ - byte[] data = getBytes(in); - return data == null? null:new String(data); - } - public static byte[] getBytes(InputStream in){ - - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - byte[] buffer = new byte[8192]; - int len = 0; - while ((len = in.read(buffer)) != -1) - baos.write(buffer, 0, len); - in.close(); - return baos.toByteArray(); - } catch (IOException e) { - return null; - } - } - public static void closeQuietly(InputStream in){ - try { - if(in != null) - in.close(); - } catch (IOException ignore) {} - } - public static void closeQuietly(OutputStream out){ - try { - if(out != null) - out.close(); - } catch (IOException ignore) {} - } -} +package master.flame.danmaku.danmaku.util; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * Created by Yrom on 13-8-11. + */ +public class IOUtils { + public static String getString(InputStream in){ + byte[] data = getBytes(in); + return data == null? null:new String(data); + } + public static byte[] getBytes(InputStream in){ + + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buffer = new byte[8192]; + int len = 0; + while ((len = in.read(buffer)) != -1) + baos.write(buffer, 0, len); + in.close(); + return baos.toByteArray(); + } catch (IOException e) { + return null; + } + } + public static void closeQuietly(InputStream in){ + try { + if(in != null) + in.close(); + } catch (IOException ignore) {} + } + public static void closeQuietly(OutputStream out){ + try { + if(out != null) + out.close(); + } catch (IOException ignore) {} + } +} diff --git a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/ui/widget/DanmakuSurfaceView.java b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/ui/widget/DanmakuSurfaceView.java index a0938d6d..1cc91169 100644 --- a/DanmakuFlameMaster/src/main/java/master/flame/danmaku/ui/widget/DanmakuSurfaceView.java +++ b/DanmakuFlameMaster/src/main/java/master/flame/danmaku/ui/widget/DanmakuSurfaceView.java @@ -102,12 +102,12 @@ public void setCallback(Callback callback) { @Override public void surfaceCreated(SurfaceHolder surfaceHolder) { - prepare(); + isSurfaceCreated = true; } @Override public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) { - isSurfaceCreated = true; + } @Override @@ -149,11 +149,12 @@ public void prepare() { handler = new DrawHandler(mDrawThread.getLooper()); handler.sendEmptyMessage(DrawHandler.PREPARE); } + } public void prepare(BaseDanmakuParser parser) { + prepare(); mParser = parser; - prepare(); } void drawDanmakus() { @@ -285,15 +286,19 @@ public void handleMessage(Message msg) { int what = msg.what; switch (what) { case PREPARE: - prepare(new Runnable() { - @Override - public void run() { - mReady = true; - if (mCallback != null) { - mCallback.prepared(); - } - } - }); + if(mParser==null || !isSurfaceCreated){ + sendEmptyMessageDelayed(PREPARE,100); + }else{ + prepare(new Runnable() { + @Override + public void run() { + mReady = true; + if (mCallback != null) { + mCallback.prepared(); + } + } + }); + } break; case START: pausedPostion = 0; diff --git a/LICENSE b/LICENSE index 37ec93a1..805e0da8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,191 +1,191 @@ -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and -distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright -owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities -that control, are controlled by, or are under common control with that entity. -For the purposes of this definition, "control" means (i) the power, direct or -indirect, to cause the direction or management of such entity, whether by -contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising -permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including -but not limited to software source code, documentation source, and configuration -files. - -"Object" form shall mean any form resulting from mechanical transformation or -translation of a Source form, including but not limited to compiled object code, -generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made -available under the License, as indicated by a copyright notice that is included -in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that -is based on (or derived from) the Work and for which the editorial revisions, -annotations, elaborations, or other modifications represent, as a whole, an -original work of authorship. For the purposes of this License, Derivative Works -shall not include works that remain separable from, or merely link (or bind by -name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version -of the Work and any modifications or additions to that Work or Derivative Works -thereof, that is intentionally submitted to Licensor for inclusion in the Work -by the copyright owner or by an individual or Legal Entity authorized to submit -on behalf of the copyright owner. For the purposes of this definition, -"submitted" means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, and -issue tracking systems that are managed by, or on behalf of, the Licensor for -the purpose of discussing and improving the Work, but excluding communication -that is conspicuously marked or otherwise designated in writing by the copyright -owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf -of whom a Contribution has been received by Licensor and subsequently -incorporated within the Work. - -2. Grant of Copyright License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the Work and such -Derivative Works in Source or Object form. - -3. Grant of Patent License. - -Subject to the terms and conditions of this License, each Contributor hereby -grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, -irrevocable (except as stated in this section) patent license to make, have -made, use, offer to sell, sell, import, and otherwise transfer the Work, where -such license applies only to those patent claims licensable by such Contributor -that are necessarily infringed by their Contribution(s) alone or by combination -of their Contribution(s) with the Work to which such Contribution(s) was -submitted. If You institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work or a -Contribution incorporated within the Work constitutes direct or contributory -patent infringement, then any patent licenses granted to You under this License -for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. - -You may reproduce and distribute copies of the Work or Derivative Works thereof -in any medium, with or without modifications, and in Source or Object form, -provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of -this License; and -You must cause any modified files to carry prominent notices stating that You -changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, -all copyright, patent, trademark, and attribution notices from the Source form -of the Work, excluding those notices that do not pertain to any part of the -Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any -Derivative Works that You distribute must include a readable copy of the -attribution notices contained within such NOTICE file, excluding those notices -that do not pertain to any part of the Derivative Works, in at least one of the -following places: within a NOTICE text file distributed as part of the -Derivative Works; within the Source form or documentation, if provided along -with the Derivative Works; or, within a display generated by the Derivative -Works, if and wherever such third-party notices normally appear. The contents of -the NOTICE file are for informational purposes only and do not modify the -License. You may add Your own attribution notices within Derivative Works that -You distribute, alongside or as an addendum to the NOTICE text from the Work, -provided that such additional attribution notices cannot be construed as -modifying the License. -You may add Your own copyright statement to Your modifications and may provide -additional or different license terms and conditions for use, reproduction, or -distribution of Your modifications, or for any such Derivative Works as a whole, -provided Your use, reproduction, and distribution of the Work otherwise complies -with the conditions stated in this License. - -5. Submission of Contributions. - -Unless You explicitly state otherwise, any Contribution intentionally submitted -for inclusion in the Work by You to the Licensor shall be under the terms and -conditions of this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify the terms of -any separate license agreement you may have executed with Licensor regarding -such Contributions. - -6. Trademarks. - -This License does not grant permission to use the trade names, trademarks, -service marks, or product names of the Licensor, except as required for -reasonable and customary use in describing the origin of the Work and -reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. - -Unless required by applicable law or agreed to in writing, Licensor provides the -Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, -including, without limitation, any warranties or conditions of TITLE, -NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are -solely responsible for determining the appropriateness of using or -redistributing the Work and assume any risks associated with Your exercise of -permissions under this License. - -8. Limitation of Liability. - -In no event and under no legal theory, whether in tort (including negligence), -contract, or otherwise, unless required by applicable law (such as deliberate -and grossly negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, incidental, -or consequential damages of any character arising as a result of this License or -out of the use or inability to use the Work (including but not limited to -damages for loss of goodwill, work stoppage, computer failure or malfunction, or -any and all other commercial damages or losses), even if such Contributor has -been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. - -While redistributing the Work or Derivative Works thereof, You may choose to -offer, and charge a fee for, acceptance of support, warranty, indemnity, or -other liability obligations and/or rights consistent with this License. However, -in accepting such obligations, You may act only on Your own behalf and on Your -sole responsibility, not on behalf of any other Contributor, and only if You -agree to indemnify, defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason of your -accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work - -To apply the Apache License to your work, attach the following boilerplate -notice, with the fields enclosed by brackets "[]" replaced with your own -identifying information. (Don't include the brackets!) The text should be -enclosed in the appropriate comment syntax for the file format. We also -recommend that a file or class name and description of purpose be included on -the same "printed page" as the copyright notice for easier identification within -third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Sample/src/main/AndroidManifest.xml b/Sample/src/main/AndroidManifest.xml index d781a33c..af5281c0 100644 --- a/Sample/src/main/AndroidManifest.xml +++ b/Sample/src/main/AndroidManifest.xml @@ -14,14 +14,16 @@ android:label="@string/app_name" android:theme="@style/AppTheme" > + android:name=".MainActivity" + android:label="@string/app_name" + android:screenOrientation="landscape" + android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > - + - + - + \ No newline at end of file diff --git a/Sample/src/main/assets/comment.json b/Sample/src/main/assets/comment.json new file mode 100644 index 00000000..0f4528ea --- /dev/null +++ b/Sample/src/main/assets/comment.json @@ -0,0 +1 @@ +[{"c":"0,16777215,1,25,196050,1364468342","m":"。。。。。。。。。。。。。。。。。。。。。。"},{"c":"3.619,16777215,1,25,196050,1364468347","m":"。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。"},{"c":"7.539,16777215,1,25,196050,1364468351","m":"。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。"},{"c":"11.291,16777215,1,25,196050,1364468355","m":"。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。"},{"c":"13.476,16777215,1,25,196050,1364468357","m":"。。。。。。。。"},{"c":"1.724,16777215,1,25,196050,1364468442","m":"3.28 打卡"},{"c":"31.229,16777215,1,25,478568,1364994609","m":"0 0"},{"c":"54.791,16777215,1,25,418656,1365183861","m":"...."},{"c":"65.617,10027008,1,25,2ack2073121228,1365184819","m":"一天不看香蕉君,不舒服斯基丶"},{"c":"11.188,16776960,1,25,478568,1365823290","m":"。。。。"},{"c":"61.625,16776960,1,25,478568,1365823340","m":"卧槽"},{"c":"87.933,16777215,1,25,461326,1366819637","m":"小湿机你在看咩"},{"c":"87.933,16777215,1,25,461326,1366819652","m":"小湿机"},{"c":"0,16776960,1,25,1bak1902192501,1368157455","m":".."},{"c":"10.711,16776960,1,25,1bak1902192501,1368157482","m":"............................"},{"c":"39.512,16777215,1,25,27dk1948164898,1368848882","m":"科比"},{"c":"35.673,16777215,1,25,22ck1867180364,1369403593","m":"播放次数:396042"},{"c":"61.976,16777215,1,25,24ek2015510060,1370615680","m":"在线2 "},{"c":"6.519,16777215,1,25,17dk3730002906,1370623489","m":"卧槽...点错了"},{"c":"27.787,16777215,1,25,36ek248534870,1370698155","m":"金♂刚♂如♂来"},{"c":"87.589,16777215,1,25,350k2104532353,1370921441","m":" 萎了、、、、、、、、、、、、"},{"c":"23.343,16777215,1,25,1f0k242492437,1371043001","m":"fuck"},{"c":"79.84,16777215,1,25,1f0k242492437,1371043057","m":"顶上去报复社会"},{"c":"49.79,16777215,1,25,231580,1371209285","m":"美国"},{"c":"47.652,65280,1,25,498k2063980741,1371983881","m":" 暖被窝一次一千円节假日半价 / 发布于 2011年 4月28日(星期四) 7时24分 / 播放:397078 评论:2456 收藏:1504 "},{"c":"25.769,16777215,1,25,38ek1896980399,1373078365","m":"炒饭无误"},{"c":"15.499,16777215,1,25,104k3072012724,1373078412","m":"顶上去!!!!!报复社会!!!!!!!!!!"},{"c":"87.927,16777215,1,25,535868,1373078428","m":"打卡"},{"c":"54.177,16777215,1,25,104k3072012724,1373078485","m":"收藏的什么性取向?"},{"c":"55.095,16777215,1,25,2d9k2101697339,1373082287","m":"我瞎了。。。"},{"c":"8.009,16777215,1,25,1fbk1946851889,1373082945","m":"报复社会"},{"c":"64.865,16777215,1,25,2e5k1018989651,1373083835","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.102,16777215,1,25,2e5k1018989651,1373083865","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"72.016,16777215,1,25,563619,1373086101","m":"顶上去报复社会"},{"c":"4.466,16777215,1,25,563619,1373086131","m":"1584个收藏是闹那样"},{"c":"65.066,16777215,1,25,4c7k2002975241,1373086719","m":"改版后老多老坟"},{"c":"33.342,16777215,1,25,1ffk2090928940,1373087526","m":"2013年7月6日 13:12:22"},{"c":"22.229,16777215,1,25,247k1855594942,1373088592","m":"2013.7.6"},{"c":"11.035,16777215,1,25,117k3702574478,1373089139","m":"yoooooooooooooooooooooooooooooo"},{"c":"23.519,16777215,1,25,115k3078797035,1373092760","m":"2013年7月6日14:39:18"},{"c":"17.136,16777215,1,25,484k1017188638,1373093593","m":"......................................................"},{"c":"82.21,16777215,1,25,4c3k244535907,1373094036","m":"石更了"},{"c":"3.156,65280,1,25,551590,1373094641","m":"。。。。。。。。。。。。"},{"c":"18.774,65280,1,25,551590,1373094657","m":"我次奥"},{"c":"5.036,16777215,1,25,329k987402398,1373095195","m":"草"},{"c":"17.707,16777215,1,25,33ck249485211,1373103359","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.1,16777215,1,37,33ck249485211,1373103502","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.246,3407616,1,25,48ek3702141711,1373106289","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"22.92,3407616,1,25,48ek3702141711,1373106384","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"21.267,16711833,1,25,1f8k3671002319,1373107024","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"35.259,16777215,1,25,482k3721736082,1373107177","m":"打卡"},{"c":"16.772,16777215,1,25,123k2075644583,1373108045","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"81.461,16777215,1,25,308543,1373109391","m":"我居然无耻的看完了"},{"c":"16.612,16777215,1,25,36ek1035411925,1373109676","m":"炒饭小号 无误"},{"c":"6.797,16777215,1,25,501507,1373110201","m":"每日打卡"},{"c":"20.621,16777215,1,25,192k2103294627,1373110747","m":"............"},{"c":"84.827,16777215,1,25,28ak467794641,1373111880","m":"双手打字以示清白"},{"c":"7.152,16737792,1,25,262k455357332,1373112100","m":"啊"},{"c":"14.061,16777215,1,25,562163,1373115212","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"2.747,65280,1,25,30bk3722666395,1373115887","m":"打卡啦"},{"c":"32.453,16777215,1,25,1adk3736329486,1373116156","m":"求BGM!!!!!!!!!!!!!!!!!!!!!!!!!!"},{"c":"55.498,16777215,1,25,1aak3072357289,1373118377","m":" 还能动。。。。"},{"c":"61.828,16777215,1,25,1aak3072357289,1373118380","m":"FUCK"},{"c":"20.848,16777215,1,25,3eek1962717247,1373121959","m":"我来打卡了......."},{"c":"40.693,3381759,1,25,1edk1962794156,1373123160","m":"1111111111111111111111111111111111111111"},{"c":"52.029,3381759,1,25,1edk1962794156,1373123171","m":"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"},{"c":"4.408,16777215,1,25,2f9k454125677,1373124185","m":"哦草!"},{"c":"50.444,65280,1,25,553421,1373125176","m":"收藏1618什么心态..."},{"c":"38.361,16777215,1,25,4a4k29683238,1373126181","m":"你麻痹?"},{"c":"19.81,16777215,1,25,3d2k1967534807,1373132178","m":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},{"c":"17.87,16777215,1,25,451k465242735,1373135469","m":"哎呦卧槽,顶上去报复世界"},{"c":"12.465,16777215,1,25,1abk2016062444,1373146913","m":"2013年7月7日5:40:08"},{"c":"22.633,16777215,1,25,420552,1373155854","m":"必须顶上去报复社会"},{"c":"0,16777215,1,25,548565,1373158670","m":"打卡"},{"c":"21.253,16777215,1,25,548565,1373158760","m":""},{"c":"12.916,16777215,1,25,406k2091038619,1373159899","m":"打卡2013年7月7日9:17:11"},{"c":"16.102,16777215,1,25,174857,1373163531","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"28.248,16777215,1,25,418656,1373164750","m":"打卡"},{"c":"28.434,16777215,1,25,258613,1373166524","m":"香蕉君无敌了"},{"c":"16.911,16777215,1,25,444k1861315545,1373166705","m":"香蕉君!"},{"c":"77.817,16777215,1,25,186k1885029973,1373166760","m":"双手打字以示清白"},{"c":"32.187,16777215,1,25,184k2102925457,1373168322","m":"bibli"},{"c":"12.112,16777215,1,25,489191,1373168409","m":"2013年7月7日11:40:17"},{"c":"16.479,16776960,1,25,334k3740305770,1373168589","m":"烧死这些同性恋"},{"c":"15.867,16711680,1,25,357k3730546841,1373170277","m":"简直丧心病狂"},{"c":"10.316,16777215,1,25,3cdk1035642435,1373171091","m":"501"},{"c":"19.164,16711782,1,25,3ffk717661093,1373171300","m":"。。。。。。。。。。。。。。。。。。。。。。。。。。"},{"c":"17.066,16711782,1,25,3ffk717661093,1373171306","m":"!!!"},{"c":"4.323,16777215,1,25,269k3738528475,1373172137","m":"2013 7.7"},{"c":"42.129,10027008,4,37,31dk3033839023,1373174002","m":"科比!"},{"c":"12.815,16777215,1,25,26ck3074307386,1373175261","m":" 打卡"},{"c":"46.931,16777215,1,25,187k3682680642,1373176996","m":"..........."},{"c":"78.136,16777215,1,25,13ak1874150387,1373180305","m":"报复社会。。"},{"c":"9.993,16711680,1,25,16dk3071440325,1373181548","m":"我是小伙伴! 我是小伙伴!"},{"c":"44.141,16711680,4,37,16dk3071440325,1373181608","m":"我是小伙伴!"},{"c":"15.061,16777215,1,25,150k1987611877,1373181620","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"64.491,16711680,4,37,16dk3071440325,1373181628","m":"我是小伙伴!我是小伙伴!我是小伙伴!我是小伙伴!我是小伙伴!我是小伙伴!我是小伙伴!我是小伙伴!我是小伙伴!我是小伙伴!我是小伙伴!我是小伙伴!我是小伙伴!我是小伙伴!我是小伙伴!我是小伙伴!我是小伙"},{"c":"15.237,16777215,1,25,415083,1373182130","m":"日常打卡,"},{"c":"23.934,16777215,1,25,420552,1373186603","m":"报复社会节奏开启"},{"c":"8.832,16777215,1,25,366k2936106977,1373186676","m":"2013年7月7日16:43:41"},{"c":"52.229,16777215,1,25,217k3722465722,1373187469","m":"主页 \u003e 生活娱乐 / 暖被窝一次一千円节假日半价 / 发布于 2011年 4月28日(星期四) 7时24分 / 播放:404511 评论:2486 收藏:1638 / 举"},{"c":"9.524,16777215,1,25,446k987429084,1373190152","m":"- - - - - - "},{"c":"37.971,16777215,1,25,446k987429084,1373190180","m":" 这打吗的好屌"},{"c":"14.824,16777215,1,25,36ak1874994172,1373192037","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"58.871,16777215,1,25,2bak2006106235,1373192955","m":"无法直视Ort"},{"c":"48.069,16777215,1,25,376k242592647,1373197574","m":"主页 \u003e 生活娱乐 / 暖被窝一次一千円节假日半价 / 发布于 2011年 4月28日(星期四) 7时24分 / 播放:404903 评论:2502 收藏:1646 / 举"},{"c":"41.6,3407616,1,25,385k3726527761,1373198456","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"43.539,16777215,1,25,317k3740600479,1373201930","m":"吊..................................................................................................."},{"c":"0,16777215,1,25,2dfk3683682083,1373202156","m":"呵呵呵呵呵"},{"c":"40.008,16777215,1,25,247k1946749991,1373205163","m":"叼暴了"},{"c":"86.723,16777215,1,37,247k1946749991,1373205210","m":"撸起来,骚年"},{"c":"16.624,16777215,1,25,395k3740450750,1373205479","m":"18个香蕉不说话"},{"c":"11.544,16777215,1,25,2c7k1965573824,1373205504","m":"2013年7月7日 21:57:24 打卡"},{"c":"29.134,13369344,1,25,27fk3062632765,1373206329","m":"啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊"},{"c":"34.049,16777215,1,25,1a2k1968491684,1373207523","m":"卧槽"},{"c":"84.827,16777215,1,25,420552,1373208023","m":"顶上去报复社会"},{"c":"14.981,16777215,1,25,361k1912296216,1373209053","m":"顶上去啊!!!!!!!!!!!!!!!!!!"},{"c":"51.766,16777215,1,25,361k1912296216,1373209106","m":"1657个收藏 我干"},{"c":"14.226,3407616,1,25,304k3722405032,1373209311","m":"。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。"},{"c":"40.375,16777215,1,25,152k3661681594,1373211071","m":"啊婆主 已经在上心病狂"},{"c":"8.751,16777215,1,25,4a8k3029030104,1373212120","m":"打卡"},{"c":"63.029,16777215,1,25,3dck454568877,1373214809","m":"yooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo"},{"c":"82.312,16777215,1,25,545714,1373215092","m":"2013年7月8日0:38:20"},{"c":"21.909,16777215,1,25,237975,1373224589","m":"谁挖坟的"},{"c":"22.424,16777215,1,25,451k465242735,1373240898","m":"每日报复社会节奏"},{"c":"14.501,16777215,1,25,3ack1901744269,1373242869","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"10.479,65280,1,25,150k1870239625,1373244297","m":"科比加强版"},{"c":"20.483,16777215,1,25,466k986806395,1373249876","m":"耶"},{"c":"14.877,16777215,1,25,144k1896832537,1373250214","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"12.279,16777215,1,25,2c4k2095314541,1373250965","m":"我来打卡了"},{"c":"62.535,16777215,1,25,261770,1373251247","m":"...."},{"c":"82.023,16777215,1,25,451k465242735,1373253347","m":"赢了怎么破"},{"c":"12.744,52479,1,25,451k465242735,1373342293","m":"顶上去报复社会"},{"c":"17.345,16777215,1,25,423547,1373815673","m":"报复社会,走你"},{"c":"42.26,16777215,1,25,244k2004555617,1373984022","m":"x笑尿。。"},{"c":"39.958,65280,1,25,360346,1374154683","m":"好吧我手滑一下"},{"c":"54.943,65280,1,25,360346,1374154698","m":"无法直视"},{"c":"13.424,16777215,1,25,325344,1374311786","m":"打卡。。 2013年7月20日 17:15:56"},{"c":"0,16724838,1,25,3c5k242233919,1374320952","m":"吾欲报复社会"},{"c":"15.278,16777215,1,25,585664,1376018232","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"18.567,16777215,1,25,585664,1376018236","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"37.071,13434624,1,25,104k2003100892,1376019458","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"19.153,13369344,1,25,458834,1376019767","m":"我擦破"},{"c":"17.607,13369344,1,25,458834,1376019864","m":"耶耶耶耶耶耶耶耶耶爷爷夜"},{"c":"0,6750003,1,25,612871,1376020469","m":"...."},{"c":"20.048,16776960,4,25,539076,1376020667","m":"打卡! "},{"c":"10.402,16777215,1,25,460k3707822210,1376022278","m":"........................"},{"c":"1.338,16777215,1,25,19ak3084018091,1376023699","m":"摇起来"},{"c":"47.208,16777215,1,25,611704,1376025935","m":"...............收藏的什么心态"},{"c":"19.201,16777215,1,25,149k993230092,1376025990","m":"我去"},{"c":"50.283,16777215,1,25,149k993230092,1376026021","m":"鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅饿鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅鹅"},{"c":"80.286,16777215,1,25,149k993230092,1376026051","m":"啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊"},{"c":"27.743,16777215,1,25,403201,1376027204","m":"看上瘾了咋办"},{"c":"25.821,16737996,1,25,530815,1376028242","m":"!!!!!!!!!!!!!!!!!!!!"},{"c":"36.653,16737996,1,25,530815,1376028253","m":"干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干"},{"c":"39.751,16737996,1,25,530815,1376028257","m":"干干干干干干干干干干干干干干干干干干干干干干"},{"c":"43.081,16737996,1,25,530815,1376028260","m":"干干干干干干干干干干干干干干干干干干干干干干干干干干干"},{"c":"45.765,16737996,1,25,530815,1376028263","m":"干干干干干干干干干干干干干干干干干干干干干干"},{"c":"48.797,16737996,1,25,530815,1376028266","m":"干干干干干干干干干干干干干干干干干干干干干干干干"},{"c":"51.47,16737996,1,25,530815,1376028268","m":"干干干干干干干干干干干干干干干干干干干干干干干干干干"},{"c":"54.289,16737996,1,25,530815,1376028271","m":"干干干干干干干干干干干干干干干干干干干干干干干干干干干"},{"c":"56.611,16737996,1,25,530815,1376028274","m":"干干干干干干干干干干干干干干干干干干干干干干干干"},{"c":"58.936,16737996,1,25,530815,1376028276","m":"干干干干干干干干干干干干干干干干干干干干干"},{"c":"61.193,16737996,1,25,530815,1376028278","m":"干干干干干干干干干干干干干干干干干干干"},{"c":"63.175,16737996,1,25,530815,1376028280","m":"干干干干干干干干干干干干干"},{"c":"26.562,16777215,1,25,571814,1376028282","m":"耶耶耶耶耶耶耶耶耶耶耶"},{"c":"66.757,16737996,1,25,530815,1376028284","m":"干干干干干干干干干干干干干干干干"},{"c":"69.165,16737996,1,25,530815,1376028286","m":"干干干干干干干干干干干干干干干干干干干干干干干"},{"c":"71.557,16737996,1,25,530815,1376028288","m":"干干干干干干干干干干干干干干干干干干干干干干"},{"c":"73.735,16737996,1,25,530815,1376028291","m":"干干干干干干干干干干干干干干干干干干干干干"},{"c":"76.557,16737996,1,25,530815,1376028293","m":"干干干干干干干干干干干干干干干干干干干干"},{"c":"29.092,16711680,1,37,614672,1376028731","m":"16个基友"},{"c":"22.594,16777215,1,25,309584,1376030511","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"17.225,16777215,5,25,44bk3071973485,1376031371","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"3.602,16777215,1,25,13ek3664566159,1376031421","m":"。。。。。。。。"},{"c":"60.201,16777215,5,25,44bk3071973485,1376031433","m":"开撸"},{"c":"33.999,16777215,1,25,13ek3664566159,1376031451","m":"。。。。。。。。。。。。。。。。。。。。。。。。。。。。"},{"c":"81.941,16777215,1,25,27ek1017187980,1376032222","m":"诱惑"},{"c":"5.011,16777215,1,25,139k2015525676,1376032988","m":"打卡- -!"},{"c":"44.246,65535,1,37,455173,1376033209","m":"啊"},{"c":"36.058,16777215,1,25,377k1911910901,1376033512","m":"2013年8月9日15:31:52"},{"c":"21.127,16777215,1,25,104k1947652358,1376033802","m":"AHAHHAHAHA"},{"c":"2.284,16777215,1,25,194k2032039251,1376037377","m":"这么有来首页了"},{"c":"9.476,16776960,1,25,3f6k3070804403,1376042411","m":"打卡"},{"c":"0,16777215,1,25,325344,1376043241","m":"哈哈哈 又上来了 打卡 2013年8月9日 18:12:36"},{"c":"44.144,16777215,1,25,25fk3061655078,1376043624","m":"收藏的什么心态收藏的什么心态收藏的什么心态收藏的什么心态收藏的什么心态"},{"c":"10.301,16777215,1,25,1cak241839552,1376044031","m":"打卡"},{"c":"50.969,16777215,1,25,318k1904807183,1376045391","m":"。。。"},{"c":"73.398,16777215,1,25,318k1904807183,1376045413","m":"好大的屌!"},{"c":"26.087,16711680,1,25,614708,1376045441","m":".."},{"c":"31.691,16777215,1,25,4d4k3030298853,1376046937","m":"2013年马薇留"},{"c":"6.405,16777215,1,25,619757,1376048357","m":"重口味"},{"c":"24.329,16777215,1,25,619757,1376048374","m":"打卡"},{"c":"67.762,16777215,1,25,258k3730122316,1376050181","m":"0000000000000000000000000000000000000000000000"},{"c":"73.064,16777215,1,25,258k3730122316,1376050186","m":".0000000000000000000000000"},{"c":"78.785,16777215,1,25,258k3730122316,1376050192","m":"00000000000000000000000000000000000"},{"c":"87.771,16777215,1,25,258k3730122316,1376050203","m":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"},{"c":"1.437,13421772,1,25,611275,1376050973","m":"我看了这个就想走。。"},{"c":"15.69,13421772,1,37,611275,1376051015","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.69,13421772,1,37,611275,1376051017","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.69,13421772,1,37,611275,1376051019","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.69,13421772,1,37,611275,1376051022","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.69,13421772,1,25,611275,1376051026","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.69,13421772,1,16,611275,1376051030","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"67.909,3381759,1,37,611275,1376051114","m":"我不知道我想干什么。可是我就是想说话。。"},{"c":"79.327,3381759,1,37,611275,1376051135","m":"不觉得。。。杨坤么。。"},{"c":"7.009,13369344,1,25,458834,1376053218","m":".................."},{"c":"27.069,13369344,1,25,458834,1376053280","m":"草"},{"c":"34.131,16777215,1,25,367k1035115771,1376053822","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"13.785,16777215,1,25,330k1885029985,1376056009","m":"每日打卡"},{"c":"21.79,16777215,1,25,486050,1376056370","m":"......................."},{"c":"19.539,16711731,1,25,12bk2059537792,1376056446","m":"瞬间被刷屏了……"},{"c":"70.195,16711731,1,25,12bk2059537792,1376056498","m":"我竟然看完了……"},{"c":"12.902,16777215,1,25,393225,1376056911","m":"主页 \u003e 生活娱乐 / 暖被窝一次一千円节假日半价 / 发布于 2011年 4月28日(星期四) 7时24分 / 播放:408,415 评论:2,512 收藏:1,721 /"},{"c":"48.342,16777215,1,25,41ek3701560160,1376057555","m":"0 0"},{"c":"59.019,16777215,1,25,41ek3701560160,1376057566","m":"收藏什么心态"},{"c":"41.194,10027008,1,25,419k1007188745,1376057962","m":"基佬在此"},{"c":"69.806,10027008,1,25,419k1007188745,1376057991","m":"曹操草草草草草草草草草草草草草草草草草草草草草草草草草草草草草草草草"},{"c":"28.757,16777215,1,25,349k1965803175,1376058287","m":"是谁"},{"c":"0,16751001,4,25,617145,1376059073","m":"我操,史前巨坟,考古队赛高"},{"c":"49.29,16777215,1,25,546869,1376059201","m":"同步率爆表!"},{"c":"2.347,16711680,4,37,134k1020459866,1376060215","m":"杨坤即视感!爆表!"},{"c":"18.808,3394560,1,25,383341,1376061683","m":"顶起来顶起来"},{"c":"32.758,16777215,1,25,401332,1376062619","m":"..............................................."},{"c":"79.203,16777215,1,25,600050,1376063136","m":"1728个收藏是什么情况?"},{"c":"7.577,16711680,1,25,591937,1376066729","m":"打卡"},{"c":"14.959,16777215,1,25,312k2005722785,1376068554","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"27.52,16777215,1,25,620468,1376071363","m":"wocao"},{"c":"74.958,16711935,1,25,32ek3723106730,1376073723","m":"毫无节操"},{"c":"14.71,16777215,1,25,244k3703207273,1376075750","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"19.997,16777215,1,25,244k3703207273,1376075756","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"69.767,16777215,1,25,244k3703207273,1376075786","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"20.485,16776960,1,25,394k2021656327,1376097000","m":"什么情况?"},{"c":"82.358,16776960,1,25,394k2021656327,1376097055","m":"石更了"},{"c":"15.177,16777215,1,25,537000,1376098220","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.402,16777215,1,25,537000,1376098244","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"33.161,16777215,1,25,4d0k3059467444,1376098921","m":"我日"},{"c":"0.655,6723840,1,25,24ak1919230024,1376099553","m":"打卡"},{"c":"32.027,65280,1,25,566893,1376102189","m":"主页 \u003e 生活娱乐 / 暖被窝一次一千円节假日半价 / 发布于 2011年 4月28日(星期四) 7时24分 / "},{"c":"11.472,16777215,1,25,307884,1376104108","m":"每日打开"},{"c":"12.86,16777215,1,25,382659,1376104392","m":"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"},{"c":"15.413,16777215,1,25,382659,1376104409","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.413,16777215,1,25,382659,1376104415","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.413,16777215,1,25,382659,1376104422","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.413,16777215,1,25,382659,1376104428","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.413,16777215,1,25,382659,1376104435","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"29.998,13408665,1,25,439024,1376104583","m":"打卡"},{"c":"29.078,16777215,1,25,245951,1376105072","m":"打卡..."},{"c":"16.893,16777215,1,25,611704,1376108149","m":"走起来~也噩噩噩噩噩噩噩噩噩噩"},{"c":"15.124,16777215,1,25,252k1933384533,1376117070","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"25.018,16777215,1,25,338k1939335882,1376119947","m":"耶"},{"c":"0.482,16777215,1,25,566783,1376120825","m":"\u003d \u003d"},{"c":"34.632,16711680,1,25,289013,1376120976","m":"可耻的银恶灵"},{"c":"4.284,16777215,1,25,566697,1376121670","m":"神甩头……"},{"c":"16.939,13369344,4,25,48ck1942933904,1376124247","m":"报复社会搞起啊"},{"c":"12.574,16777215,1,25,499k3662479322,1376126734","m":"。。。。。"},{"c":"77.721,16777215,1,25,499k3662479322,1376126799","m":"我居然看完了+1..."},{"c":"66.386,6737151,1,25,621354,1376127623","m":"飞 "},{"c":"33.26,16777215,1,25,621447,1376131168","m":"日常打卡系列"},{"c":"13.877,16777215,1,25,4b1k3662454931,1376131296","m":"2013年8月10日 18:40:29"},{"c":"8.711,16777215,1,25,127k2104708180,1376131476","m":"..."},{"c":"13.243,16777215,1,25,10fk1034146970,1376131479","m":"来打卡。。。。。。。。。。"},{"c":"13.691,16777215,1,25,237582,1376131564","m":"啊♂"},{"c":"84.488,16777215,1,25,237582,1376131657","m":"这健美的肌肉,王の谜微笑"},{"c":"18.155,16777215,1,25,4d2k1018810962,1376133311","m":"顶上去报复社会"},{"c":"55.547,16776960,4,25,418k1996750992,1376133796","m":"小伙伴好强悍"},{"c":"14.218,13434624,1,25,576058,1376134995","m":"wocao "},{"c":"26.499,13434624,1,25,576058,1376135008","m":"3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"},{"c":"39.818,13434624,1,25,576058,1376135021","m":"3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"},{"c":"52.38,13434624,1,25,576058,1376135033","m":"3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333"},{"c":"35.837,16777215,1,25,2c9k2078827628,1376135639","m":"顶上去报复社会"},{"c":"15.832,16777215,1,25,186k3074211670,1376137394","m":"杨坤 卧槽"},{"c":"38.655,16777215,1,25,186k3074211670,1376137417","m":"啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊"},{"c":"51.2,16777215,1,25,186k3074211670,1376137430","m":"科比"},{"c":"37.391,16777215,1,25,608896,1376137620","m":"挖坟老坑了!!- -"},{"c":"20.606,16777215,1,25,325344,1376139878","m":"打卡 2013年8月10日 21:03:12 "},{"c":"31.826,13369344,1,25,3b9k1947407437,1376139894","m":"啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊"},{"c":"23.769,16777215,1,25,249393,1376142115","m":"耶耶耶"},{"c":"6.929,13434777,1,25,404k2086353330,1376145403","m":"打卡吧……"},{"c":"76.145,16777215,1,25,458k2034184434,1376146315","m":"好屌屌屌屌屌屌屌屌屌屌屌屌屌屌"},{"c":"87.886,16777215,1,25,317k3729928182,1376147520","m":"有木有感觉像罗纳尔多"},{"c":"46.027,16777215,1,25,1cek2105502321,1376149328","m":"410000"},{"c":"66.967,13369395,5,25,489k3661677826,1376150846","m":"前来打卡"},{"c":"12.447,16777215,1,25,37ck1785980621,1376179903","m":"- -2013.8.11"},{"c":"48.757,16777215,1,25,37ck1785980621,1376179940","m":"硬了怎么办"},{"c":"0.297,6749952,5,25,516261,1376181869","m":"欢迎观看《肌肉进行曲》"},{"c":"14.965,16777215,1,25,44bk3071973485,1376182825","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"12.347,16776960,4,37,507878,1376183526","m":"AV画质"},{"c":"44.318,16776960,4,37,507878,1376183560","m":"1765个收藏心态"},{"c":"15.332,16777215,1,25,1d4k236011651,1376187564","m":"罗纳尔多"},{"c":"23.92,16777215,1,25,1dbk1786742976,1376190305","m":"............."},{"c":"87.917,16777215,1,25,1dbk1786742976,1376190407","m":"迷の微笑"},{"c":"47.296,16777215,1,25,2b5k3730060046,1376191845","m":"广西频道发来贺电"},{"c":"47.032,16777215,1,25,1b7k2095450225,1376193392","m":"我要吐了"},{"c":"77.956,6684672,5,25,1b7k2095450225,1376193474","m":"▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩"},{"c":"14.184,16777215,1,25,320k2883429025,1376193568","m":"YEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYEYE"},{"c":"77.956,6684672,5,25,1b7k2095450225,1376193581","m":"▩▩▩▩▩▩▩▩▩欢迎使用护眼弹幕▩▩▩▩▩▩▩▩▩▩"},{"c":"77.956,6684672,5,25,1b7k2095450225,1376193596","m":"▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩"},{"c":"16.222,13395609,1,25,320k2883429025,1376193605","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"27.023,16777215,1,25,529412,1376193841","m":"节操掉了一地"},{"c":"1.652,13434624,1,25,595888,1376197519","m":"看过不说话"},{"c":"8.227,16777215,1,25,622565,1376199281","m":"打卡"},{"c":"14.5,3394815,1,25,506067,1376202751","m":"打卡"},{"c":"18.145,16777215,1,25,584461,1376203682","m":"每日打卡!!!!"},{"c":"3.565,16777215,1,25,622662,1376203695","m":"..."},{"c":"12.625,16777215,1,25,39ak977057938,1376205596","m":"哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇"},{"c":"73.017,16777215,1,25,592163,1376206800","m":"光滑 没毛!!!!"},{"c":"73.017,10092441,1,25,592163,1376206815","m":"没毛!!"},{"c":"6.05,16777215,1,25,37ck1785980621,1376206948","m":"2013.8.11"},{"c":"58.484,16711680,1,37,2d8k1946238324,1376208217","m":"他要自摸了。。。。。。。。。受不鸟了。。。。"},{"c":"5.201,16777215,1,25,250k409716719,1376208782","m":"打开"},{"c":"18.939,16777215,1,25,206k1911775910,1376210523","m":"呵呵"},{"c":"52.488,16777215,1,25,206k1911775910,1376210557","m":"刷屏+1"},{"c":"67.016,16777215,1,25,206k1911775910,1376210571","m":"法克"},{"c":"81.281,16777215,1,25,3f4k2073541231,1376210956","m":"啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊"},{"c":"80.625,16777215,1,25,100k3030428551,1376211394","m":"打证白"},{"c":"31.416,16777215,1,25,614007,1376212423","m":"什么东西"},{"c":"14.009,16777215,1,25,44bk3071973485,1376212845","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"27.607,16777215,1,25,572231,1376213936","m":"日常打卡"},{"c":"16.912,16777215,1,25,605743,1376218302","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"9.1,16777215,1,25,605743,1376219700","m":"看一遍笑一次。。"},{"c":"16.279,16777215,1,25,605743,1376219708","m":"耶耶耶耶耶"},{"c":"15.025,16777215,1,25,2a0k1010239990,1376219790","m":"........................................................................"},{"c":"4.305,16777215,1,25,11ak1894547491,1376220450","m":"..."},{"c":"10.339,16777215,1,25,482k2034062684,1376221602","m":"d打卡"},{"c":"20.025,16777215,1,25,482k2034062684,1376221611","m":"夜夜夜夜"},{"c":"30.814,16777215,1,25,498k2102044667,1376224344","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶爷爷爷爷夜夜夜yee5"},{"c":"58.483,16777215,1,25,498k2102044667,1376224371","m":"擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦擦"},{"c":"12.275,16777215,1,25,23bk3733406631,1376224558","m":"打卡"},{"c":"9.587,16711782,1,25,367k2057138470,1376225672","m":"表情超销魂!"},{"c":"13.88,16711680,1,25,334k3070638933,1376226617","m":" "},{"c":"18.243,16777215,1,25,375895,1376228032","m":"我也来打个卡吧"},{"c":"35.603,16777215,1,25,309177,1376228477","m":"夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜夜"},{"c":"24.416,16777215,1,25,158576,1376228832","m":"无法直视"},{"c":"13.837,13382502,1,25,620591,1376231904","m":"打卡"},{"c":"25.387,13382502,1,25,620591,1376231916","m":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},{"c":"53.762,13382502,1,25,620591,1376231944","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"73.111,13382502,4,25,620591,1376231964","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"84.769,13382502,1,25,620591,1376231975","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"22.134,16777215,1,25,623376,1376232266","m":"......................"},{"c":"55.778,16777215,1,25,597552,1376232792","m":"神弹幕 不可否认 我是看弹幕的"},{"c":"8.139,16777215,1,25,130k2876188882,1376234404","m":"a"},{"c":"15.353,16777215,1,25,121k3730778254,1376234861","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.659,6684825,1,25,189k2073480635,1376239744","m":"夜夜夜夜夜夜夜夜夜夜夜夜"},{"c":"23.454,16724736,1,25,1b3k3670962492,1376266101","m":"2013.8.12"},{"c":"14.862,16724736,1,25,1b3k3670962492,1376266182","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"22.954,16724736,1,25,1b3k3670962492,1376266190","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"30.16,16776960,1,25,180k249509149,1376275642","m":"液"},{"c":"6.397,16777215,1,25,624035,1376276334","m":"打卡"},{"c":"30.983,16777215,1,25,4a5k1946234471,1376279150","m":"软掉了 T.T..."},{"c":"54.218,16777215,1,25,4a5k1946234471,1376279174","m":"竟然软掉了 ,,,,"},{"c":"40.096,16777215,1,25,1e2k3029168501,1376279250","m":"我是来听BGM的"},{"c":"30.241,16777215,1,25,454k463273829,1376280162","m":"打卡"},{"c":"48.883,16777215,1,25,393225,1376281142","m":"今日打卡2013年8月12日 12:19:05"},{"c":"45.148,13369599,4,37,1b3k1033710953,1376282278","m":"2013.8.12"},{"c":"57.568,16777215,1,25,44bk1851130326,1376282652","m":"真的是香蕉吗"},{"c":"17.456,16777215,1,25,2c3k3702014318,1376283657","m":"\u003d \u003d"},{"c":"10.043,6749952,1,25,4d8k3722613906,1376285088","m":"打卡"},{"c":"81.256,6749952,1,25,4d8k3722613906,1376285159","m":"我艹!不能直视啊 "},{"c":"77.976,16777215,1,25,532917,1376287835","m":"1799收藏"},{"c":"0.632,16777215,1,25,624425,1376289715","m":"打卡"},{"c":"24.667,16777215,1,25,622912,1376291639","m":"2013-8-12 15:13:58"},{"c":"0,16777215,1,25,567743,1376294017","m":"打卡了绅士们..."},{"c":"21.687,13408512,1,25,20bk986871394,1376294378","m":"耶耶耶"},{"c":"15.04,13408512,1,25,20bk986871394,1376294480","m":"耶耶耶耶耶"},{"c":"18.614,16777215,1,25,585664,1376297871","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.819,16711680,1,25,591937,1376297948","m":"打卡!!!!!!!!!"},{"c":"16.468,16711680,1,25,591937,1376298006","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"17.037,16777215,1,25,566697,1376300118","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶夜夜2"},{"c":"14.844,16777215,1,25,566697,1376300171","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.789,16777215,1,25,20ek2007451346,1376301534","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"13.681,16777215,1,25,559740,1376302153","m":"yoo"},{"c":"14.361,16777215,1,25,597374,1376304489","m":"打卡"},{"c":"3.66,16777215,1,25,266k3723106730,1376308867","m":"打卡"},{"c":"30.341,16711731,4,37,266k3723106730,1376308894","m":"继续丧心病狂"},{"c":"10.565,16777215,1,25,3c6k3757386694,1376309156","m":"打卡"},{"c":"16.416,16777215,1,25,4d2k1018810962,1376309537","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"12.315,16777215,1,25,4d2k1018810962,1376309718","m":"看了7遍了。。"},{"c":"45.952,16777215,1,25,271k1867408839,1376310116","m":"顶上去报复社会"},{"c":"59.282,16777215,1,25,315k3396199020,1376310939","m":"我擦啊啊 啊啊啊啊啊啊啊"},{"c":"24.622,16777215,1,25,248k1911799324,1376311419","m":"打卡+1"},{"c":"41.684,16777215,1,25,248k1911799324,1376311436","m":"每日必看- -"},{"c":"80.693,16777215,1,25,38ak1960930797,1376312094","m":"..."},{"c":"25.238,16777215,1,25,1b5k3701977691,1376318290","m":"................"},{"c":"13.113,16777215,1,25,172661,1376318903","m":"2013.8.12"},{"c":"51.958,16711680,1,25,387645,1376321267","m":"顶上去报复社会"},{"c":"19.408,16777215,1,25,178252,1376325904","m":"金刚如来!"},{"c":"13.351,16777215,1,25,166k3662278790,1376328310","m":"求BGM"},{"c":"52.529,16777215,1,25,166k3662278790,1376328349","m":"文化接触太给力了"},{"c":"46.894,16777215,1,25,258k3658903074,1376342389","m":"丧心病狂!"},{"c":"23.442,16777215,1,25,625727,1376342676","m":"打卡啊"},{"c":"11.096,16777215,1,25,385k2006107404,1376352828","m":"前来打卡"},{"c":"19.957,16777215,1,25,313k2074454599,1376353232","m":"弹幕好多啊"},{"c":"76.404,16777215,1,25,522845,1376353426","m":" - -"},{"c":"14.544,16777215,1,25,34fk245272954,1376357240","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"16.276,16777215,1,25,34fk245272954,1376357245","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"16.276,16777215,1,25,34fk245272954,1376357250","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"9.564,16777215,1,25,572231,1376360217","m":"每日打卡"},{"c":"14.666,3407616,1,25,576285,1376361161","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,1,25,576285,1376361165","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,1,25,576285,1376361168","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,1,25,576285,1376361171","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,4,25,576285,1376361178","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,4,25,576285,1376361181","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,4,25,576285,1376361183","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,1,25,576285,1376361192","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,1,25,576285,1376361196","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,1,25,576285,1376361198","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,1,25,576285,1376361200","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,1,25,576285,1376361202","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,1,25,576285,1376361204","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,1,25,576285,1376361206","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,1,25,576285,1376361210","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,1,25,576285,1376361213","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.666,3407616,1,25,576285,1376361218","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"5.177,26316,4,25,267k2090994000,1376361508","m":"炒饭?"},{"c":"87.933,16777215,1,25,1a7k3069283466,1376361779","m":"2013年8月13"},{"c":"27.815,16777215,1,25,171405,1376362569","m":"耶耶!!!!!!!!!!!耶耶!!!!!!!!!!!耶耶!!!!!!!!!!!耶耶!!!!!!!!!!!耶耶!!!!!!!!!!!耶耶!!!!!!!!!!!耶耶!!!!!!!!!!!耶耶!!!!!!!"},{"c":"32.579,16777215,1,25,171405,1376362574","m":"耶耶!!!!!!!!!!!耶耶!!!!!!!!!!!耶耶!!!!!!!!!!!耶耶!!!!!!!!!!!耶耶!!!!!!!!!!!耶耶!!!!!!!!!!!"},{"c":"7.32,16777215,1,25,119k1857965230,1376365425","m":"耶耶耶耶~"},{"c":"15.537,16777215,1,25,1c7k2101364304,1376365766","m":"没弹幕"},{"c":"45.25,10027161,1,25,387k453943713,1376367231","m":"杨坤,"},{"c":"7.229,16776960,1,25,606859,1376370237","m":"打卡。。"},{"c":"0,6710886,1,25,582628,1376370715","m":"wa"},{"c":"5.823,16777215,1,25,352k1017434011,1376371231","m":"......................."},{"c":"3.909,16777215,1,25,417219,1376371271","m":"打卡。。。。。。"},{"c":"17.374,16777215,1,25,566697,1376373973","m":"耶耶耶耶耶耶耶耶耶"},{"c":"14.054,16777215,1,37,566697,1376374027","m":"are you ready"},{"c":"13.541,16711680,5,37,566697,1376374083","m":"Are you ready"},{"c":"17.659,3381759,1,25,424199,1376374824","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"33.684,16777011,1,25,406k3029170287,1376377099","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"13.417,16777215,1,25,532321,1376377112","m":"2013-08-13 14:58:38 打卡"},{"c":"16.714,13158,1,37,532321,1376377128","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"20.598,13158,1,37,532321,1376377132","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"22.68,13158,1,37,532321,1376377134","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"76.478,16777011,4,25,406k3029170287,1376377142","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"87.215,16777011,4,25,406k3029170287,1376377153","m":"500个基友不说话"},{"c":"19.279,13369344,5,37,532321,1376377169","m":"2013-08-13 14:59:35 每日打卡"},{"c":"29.294,16777215,1,25,626391,1376377489","m":"我看了3次了"},{"c":"79.901,16777215,1,25,626391,1376377540","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"59.807,16777215,1,25,4dck1035737753,1376377654","m":"杨坤有木有?"},{"c":"11.296,16777215,1,25,4dck1035737753,1376377695","m":"杨坤杨坤杨坤"},{"c":"39.395,16777215,1,25,4dck1035737753,1376377708","m":"杨坤"},{"c":"63.041,16777215,1,25,532917,1376377930","m":"主页 \u003e 生活娱乐 / 暖被窝一次一千円节假日半价 / 发布于 2011年 4月28日(星期四) 7时24分 / 播放:415,449 评论:2,533 收藏:1,824 /"},{"c":"25.6,16777215,1,25,145k3395750786,1376378270","m":"打卡日常!"},{"c":"24.629,6750207,1,25,478k3072636344,1376385749","m":"弄得一手好洛阳铲!"},{"c":"64.338,6750207,1,37,478k3072636344,1376385789","m":"大香蕉!"},{"c":"76.837,6750207,1,37,478k3072636344,1376385802","m":"有耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"9.913,16711680,1,25,461k2032076344,1376387128","m":"不是这首歌捏"},{"c":"41.313,16711680,1,25,461k2032076344,1376387160","m":"怎么可能是炒饭呢 我不认识他……\u003d。\u003d"},{"c":"66.44,16777215,1,25,605539,1376392369","m":"1826个收藏什么心态"},{"c":"5.782,16777215,1,25,360088,1376396483","m":"摇起来"},{"c":"26.991,16777215,1,25,21ak1033502638,1376397265","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"16.38,16777215,1,25,21ak1033502638,1376397277","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶v耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"44.459,16777215,1,25,3bdk2947511981,1376398050","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"55.836,16777215,1,25,3bdk2947511981,1376398062","m":"小丁丁"},{"c":"24.275,3407616,1,25,597033,1376398577","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"15.221,16711680,1,25,120k3085204837,1376398889","m":"......"},{"c":"14.751,16711680,1,25,120k3085204837,1376398919","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"19.935,16711680,1,25,120k3085204837,1376398924","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"33.583,16777215,1,25,441775,1376402422","m":"打卡不解释"},{"c":"18.175,16777215,1,25,600087,1376402531","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"14.615,16777215,5,25,585664,1376402819","m":"Are you ready?"},{"c":"10.981,16777215,1,25,400k3061677543,1376402907","m":"打卡"},{"c":"19.41,16777215,1,25,29ck1900353397,1376403241","m":"................."},{"c":"40.775,16777215,1,25,223k244518479,1376406469","m":"看不到啊看不到啊看不到啊看不到啊看不到啊看不到啊看不到啊看不到啊看不到啊看不到啊看不到啊看不到啊看不到啊"},{"c":"17.361,16777215,1,25,3b3k3659281694,1376407201","m":"2013年8月13日 23:19:57"},{"c":"34.2,16777215,1,25,599621,1376409181","m":"我又来了"},{"c":"0,16711680,1,25,611275,1376410430","m":"这是一个让大家都变基佬的阴谋。"},{"c":"47.866,16711680,1,25,611275,1376410484","m":"我的眼睛!!!"},{"c":"55.535,16711680,4,37,611275,1376410502","m":"我的眼睛!"},{"c":"84.865,65535,1,25,3a5k1781617181,1376411413","m":"干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干干"},{"c":"12.776,16777215,1,25,276k1981480729,1376412042","m":"。。。。"},{"c":"47.856,16711680,1,25,4cek1867427908,1376414470","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"78.741,16711680,1,37,4cek1867427908,1376414501","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"70.281,16777215,1,25,40fk2948117381,1376427964","m":"无法直视 丧心病狂"},{"c":"17.25,16777215,1,25,20ek3083468584,1376428049","m":"打卡8.14早上"},{"c":"17.965,16777215,1,25,20ek3083468584,1376428081","m":"耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶耶"},{"c":"36.487,16777215,1,25,254049,1376429548","m":"求bgm"},{"c":"43.589,16777215,1,25,177k3662843066,1376435280","m":"丧心病狂的七夕"},{"c":"15.152,16777215,1,25,453k3723125416,1376444152","m":"打卡"},{"c":"65.262,16777215,1,25,453k3723125416,1376444202","m":"卧槽、"},{"c":"16.507,16777215,1,25,166316,1376446088","m":"美国大雕"},{"c":"17.339,13369344,1,25,532321,1376453125","m":"2013年8月14日 12:05:26 打卡"},{"c":"48.351,6750003,1,25,615328,1376453285","m":"baofushehui!!!!!!!!!!!"},{"c":"58.802,16777215,1,25,3d0k2095941037,1376456170","m":"⑨个小伙你好"},{"c":"68.467,16777215,1,25,3d0k2095941037,1376456180","m":"曹。。。。"},{"c":"18.832,16711680,1,25,385421,1376457625","m":"8月14日赵志斌打卡"},{"c":"0.493,16711680,4,25,385421,1376457661","m":"8月14日赵志斌打卡广州北大附中贺电"},{"c":"0,16777215,1,25,403k3721738134,1376458877","m":"2013年8月14日13:42"},{"c":"5.345,16777215,1,25,19ak2000570677,1376459956","m":"打卡"},{"c":"4.087,16777215,1,25,580660,1376461730","m":"兄贵--------------------------------------------------------------------------------------------------"},{"c":"12.885,16777215,1,25,149k1912070066,1376466041","m":"......................"},{"c":"21.97,16777215,1,25,149k1912070066,1376466070","m":"表情帝!!!!!!!!!!!!!!!!!!"},{"c":"5.968,13408512,1,25,4d9k3736983214,1376466747","m":"日常打卡"},{"c":"63.916,13408512,1,25,4d9k3736983214,1376466805","m":" 收藏:1,842 "},{"c":"38.359,16777215,1,25,18ck3663086991,1376468188","m":".."},{"c":"10.45,16777215,1,25,554498,1376469294","m":"k "},{"c":"14.564,16777215,1,25,146k3740635017,1376470286","m":"```````````````````````"},{"c":"77.734,16777215,1,25,376k1900079524,1376471392","m":"一样呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀呀"}] \ No newline at end of file diff --git a/Sample/src/main/java/com/sample/MainActivity.java b/Sample/src/main/java/com/sample/MainActivity.java index b7ee3b16..f68b8b3c 100644 --- a/Sample/src/main/java/com/sample/MainActivity.java +++ b/Sample/src/main/java/com/sample/MainActivity.java @@ -1,23 +1,137 @@ -package com.sample; - -import android.os.Bundle; -import android.app.Activity; -import android.view.Menu; - -public class MainActivity extends Activity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main1); - } - - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.main, menu); - return true; - } - -} + +package com.sample; + +import java.io.IOException; +import java.io.InputStream; + +import android.app.Activity; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.os.Environment; +import android.util.DisplayMetrics; +import android.view.*; +import android.widget.PopupWindow; +import android.widget.VideoView; +import master.flame.danmaku.danmaku.loader.ILoader; +import master.flame.danmaku.danmaku.loader.IllegalDataException; +import master.flame.danmaku.danmaku.loader.android.DanmakuLoaderFactory; +import master.flame.danmaku.danmaku.model.DanmakuTimer; +import master.flame.danmaku.danmaku.model.android.AndroidDisplayer; +import master.flame.danmaku.danmaku.parser.BaseDanmakuParser; +import master.flame.danmaku.danmaku.parser.IDataSource; +import master.flame.danmaku.danmaku.parser.android.AcFunDanmakuParser; +import master.flame.danmaku.danmaku.parser.android.BiliDanmukuParser; +import master.flame.danmaku.ui.widget.DanmakuSurfaceView; +import master.flame.danmaku.ui.widget.DanmakuSurfaceView.Callback; + +import com.sample.R; + +public class MainActivity extends Activity { + + private DanmakuSurfaceView mDanmakuView; + + private VideoView mVideoView; + + private View mMediaController; + + public PopupWindow mPopupWindow; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + findViews(); + } + + private BaseDanmakuParser createParser(InputStream stream) { + ILoader loader = DanmakuLoaderFactory + .create(DanmakuLoaderFactory.TAG_BILI); + + try { + loader.load(stream); + } catch (IllegalDataException e) { + e.printStackTrace(); + } + BaseDanmakuParser parser = new BiliDanmukuParser(); + IDataSource dataSource = loader.getDataSource(); + parser.load(dataSource); + return parser; + + } + + private void findViews() { + LayoutInflater mLayoutInflater = getLayoutInflater(); + mMediaController = mLayoutInflater.inflate(R.layout.media_controller, null); + mMediaController.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (mPopupWindow != null) { + mPopupWindow.dismiss(); + } + + if (mVideoView != null) { + mVideoView.start(); + } + } + }); + + // VideoView + mVideoView = (VideoView) findViewById(R.id.videoview); + // DanmakuView + mDanmakuView = (DanmakuSurfaceView) findViewById(R.id.sv_danmaku); + if (mDanmakuView != null) { + + BaseDanmakuParser parser = createParser(this.getResources() + .openRawResource(R.raw.comments)); + mDanmakuView.prepare(parser); + + mDanmakuView.enableDanmakuDrawingCache(true); + mDanmakuView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View view) { + if (mPopupWindow == null) { + mPopupWindow = new PopupWindow(mMediaController, + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + } + + if (mPopupWindow.isShowing()) { + mPopupWindow.dismiss(); + } else{ + mPopupWindow.showAtLocation(mDanmakuView, Gravity.NO_GRAVITY, 0, 0); + } + + if (mVideoView != null) { + mVideoView.pause(); + } + } + }); + + + } + + + if (mVideoView != null) { + mVideoView.setVideoPath(Environment.getExternalStorageDirectory() + "/1.flv"); + //mVideoView.setVideoPath("http://edge.v.iask.com/44027740.hlv?KID=sina,viask&Expires=1380384000&ssig=d3Xzxbv1fI"); + } + + mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mediaPlayer) { + mediaPlayer.start(); + mDanmakuView.start(); + } + }); + + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + +} diff --git a/Sample/src/main/res/layout/activity_main.xml b/Sample/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..b232584c --- /dev/null +++ b/Sample/src/main/res/layout/activity_main.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + diff --git a/Sample/src/main/res/layout/media_controller.xml b/Sample/src/main/res/layout/media_controller.xml new file mode 100644 index 00000000..0fc4110b --- /dev/null +++ b/Sample/src/main/res/layout/media_controller.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Sample/src/main/res/raw/comments.xml b/Sample/src/main/res/raw/comments.xml new file mode 100644 index 00000000..4fe2d7b9 --- /dev/null +++ b/Sample/src/main/res/raw/comments.xml @@ -0,0 +1,1420 @@ + + + chat.bilibili.tv + 64733 + 0 + k-v + 敢挖我就敢顶!!! + 第四次顶上来了! + 被折服了 ,不愧是宝 + 2013.7.1 + 打卡~ + 3年前的。。。这是官方挖坟啊。。 + 好多神弹幕。。 + 真·绿光…… + 再次挖坟 + 各种挖坟 + =,= + 2013.7.2 1点10分 + 挖坟- - + 2013.7 .3 啊啊 + 翻收藏翻到的,收藏时间:2011-12-17 + 敢挖就敢看! + 我擦碉堡了 + 碉堡了我擦 欧耶 来 + 镇站之宝补完计划 + 话说另外一个是什么? + 2013.7.4 + 大爱! + 哇哇哇哇 + 大爱!!!!!!! + 好棒!!!! + 干挖出来 我就敢看 + 尼玛居然又被顶上来了 + 2013.7,。4 + 镇站之宝 (惊 歌我喜欢 + 膜拜之 + 挖的一手好坟 + 不发弹幕对不起阿婆主 + 敢挖敢看 + 敢挖我就敢看←_← + 敢挖我就敢看←_←考古队新队员参见 + 2013.7.5 + 敢顶上来我就敢看 + 神探木 + 看见由依就进来了 + 赞啊 + 顶起 + 新人膜拜 + 2013/7/8 + 2013. 7. 6 + 又顶上去 + 2013.7.6 + 挖坟 + 挖坟+1 + 2013.7.6 + 2013.7.6 + 2013.7.7 + 考古!!!!!!!!! + 新人来膜拜 + + 神剪辑啊 ~ + 你好!!! + 我来挖坟了。。 + YF是禽兽 + 神弹幕啊 + 考古队员。2013.7.8 + 敢挖我就敢收藏! + 2013.7.8 + 啊啊啊,暂停顶赫萝啊 + 啊啊啊 我发现了!!! + 顶上去!!!! + 不愧是B站二宝!!!!! + 敢挖敢 + 敢挖敢看 + 敢挖就敢顶 + sad + 考古队员 + 2013.7.8 + 考古队员 2013.7.8 前来报到 + 敢挖就敢看 + 刘明 + 2013.7.8 + 2013.07.08 + 考古 2013 7 8~~ + 上古时代的坟了 + 考古学家,,,,。。。 + 超好的,大爱 + 依然喜欢你 + 敢挖我就敢看系列 + 这竟然是古坟 + 弹幕强大....新人膜拜之..~~~ + SHEN + 大赞 + 第一次观看建议屏蔽普通弹幕 + 靠 这么老!! + 2013..7.8 + 考古队报道 + 播放:291184 + + 考古 + 顶上来就再看一遍 + 2013.7.8 + 2013.07.08 敢挖我就看 + 楼上好 - = + 抓到挖坟的了 + 又被顶上来了 + 请战斗人员注意,前方高级弹幕出现 + 2013.7.8前来考古! + 什么东东。。。。。。 + 考古 不科学啊 + 每日签到 + 前来挖坟 + 好厉害的样子 + 敢挖就敢看系列 + 2013.7.8 敢挖就敢看 + #159周榜过来顶 + 2013 7 8 22:49 留念 + 看一次,顶一次,主要是神弹幕 + 我要照射你们头顶~~~ + 2013.7.8 23点35分。又被挖上来了 + 你敢顶我就敢看、、 + 我是来挖坟的 + 考古 + 千年古坟啊 + 慕名而来....... + GREEN LIFE + 弹幕屌炸天. + 2013.7.8... + 收藏之. + 3分钟?! + 挖宝 + + + 呀! + + + 幕! + 哇?这怎么搞得 + 怎么弄的 + 我来看神弹幕!!! + 张起灵和小哥过来倒戈墓 2013 7 9 + 神弹幕 + 神弹幕 + 绿 + + 2013.07.08 + 2013.07.08 + 2013.07.09 + 又挖上来了 第几次了 + 好强悍的弹幕啊 + 镇站之宝=、= + 快乐? + 好厉害的弹幕⊙▽⊙ + 好厉害的弹幕⊙▽⊙ + 好厉害的弹幕 + ⊙▽⊙ + ⊙▽⊙ + 各种神弹幕 + 好啊 + 2013..7.9考古完毕 + 2013.7.9 + 我来考古 + 2013.7.9 又顶上来了 + w + 2013年7月09号挖坟来的w【by江恩平爱画画_(:з」∠)_】 + 哇擦,神弹幕啊啊啊 + 2013 7 9 + 恭喜你发现镇站之宝 + 千古巨坟 + 其实我就是来看高级弹幕的... + 我敢挖你们敢看吗 + 考古队在此 + 美爆了 + 好棒! + 美死了 + 我是来看神弹幕的 + 又被顶上来了 + 小太以太颜太...你们三人是什么关系!! + 我也是考古学家了 + 考古队的来了?还是小学生来了? + 卧槽。。。2013 7 9 + 敢挖就敢看 + 2013.7.9 + 20130709,考古队路过 + 获得成就 禅师级考古 + 完美 + 技术宅拯救世界系列 + 2013.07.10 + 绿 + green + light + green + light + jiu】 + 镇站之宝啊 + 100题球帮忙啊!!!!!!!!!! + 无缘 + 考古队,专门挖坟。又把这个挖上来了? + 赞!!! + 敢挖敢看 + 又顶上来了=L= + chaoshen + 20130710 + .....诶 + 2013.7.9 + 考古学的胜利 + 2013.7.11签到 + 来看看二宝 + 2013 7 11 报道!!!! + 怎么又挖出来了 + 2013.7.11 + 7月12考古中 + + 2013.07.12发现镇站之宝~ + + 谁又挖上来了 + CPU要爆了 + 2013.7.12 + 考古 什么的 最好了 + 考古神队友! + GG + 又被顶上来了诶 + 凛酱!!!!! + 2013.7.12 + 尼玛这弹幕怎么回事! + 2013.7.13 + 又被顶上来了。。。。 + kabuao + 顶上去 + 又顶上来了 + 2013.7.13 + 果然是镇站之宝~~~~ + 2013.7.15 + 2013.7.15 每日签到 + 2013.7.14 + 敢挖我就敢看 + 当年看的时候我还不是会员。。。 + 2013.7.15 + 弹幕 + 考古 + 我和我的小欧伙伴都惊呆了 + 我和我的小伙伴都惊呆了 + 考古的说 + 神弹幕 + 2013.7.16 + 挖坟? + 2013.7.16.敢挖敢看! + 真爽啊 + 这怎么又挖出来了 + 我去挖祖坟去! + 2013.7.16 + 2013 7 16日 考古学家前来考古 + 2013.7.16挖的好 + 不错!!! + 时间 + 2013.7.16 + 又上来了= = + 高级弹幕!!!美瞎 + 2013.7.16 + 2013.7.16 又被挖上来了 + 又是谁挖上来的啊 + 2013 7 16 + 我屮艸芔茻,,, + 收藏还没破万? + 考古学家的胜利 + 7.16考古 + 2013.7.17前来挖宝 + 怒砸硬币!!! + 2013-7-17-0:47 + B站镇站之宝 + (*^__^*) 嘻嘻…… + a + 2013 . 7. 17打卡 + 2013.7,18 敢挖敢看 + 2013.7.18 + 挖槽 后面什么都看不见 + 神弹幕 + 卡了 + 2013年7月十几号居然还有和我一样的三个观众你们好啊啊啊啊· + 考古新人报道! + 考古队在此 + 挖宝!!!!! + 看到AB进来 竟然是坟 + 继续挖 + 这坟挖的。。。 + 2013.7.18留恋 + 7月18签到期末刚考完 + 吐槽什么的最讨厌了! + 乌贼娘 吊炸天 太霸气了 + 报道 + 2013.7.18 + 打捞队 表示无辜 我不是故意挖坟的 + 大家注意 歌词 是弹幕 看准了 + 2013.7.19 + 2013 7 19 + 顶上去再说 + 2013.7.19 + 7.19敢来敢看 + ?*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:? + + ?*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:? + + 又被挖了 + 2016.2.13 你敢顶我敢看 + 谁又把这坟挖出来了 + 被弹幕卡成狗。。 + 来听了 + 神弹幕 + ?*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:? + + ?*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:? + + ?*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:? + + ?*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:? + + 你敢挖我就敢看!!! + 2013。7。20 + 2013.7.19 + 2013.7.20 + 我去 这是远古巨坟吧 + 牛逼 + 感觉燃了。~ + 2013.7 + #搞基 + 2013.07021 + 各种神弹幕。。。 + 看见由衣我就圆滑的进来了 + 2013.7.21 + 不错呵 赞一个 顶一下 + 跪求高清重制 + 又首页了 + 莫名的燃了↑↑↑ + 你们敢顶我就敢看!!!! + 另外4个人,你们好!! + 我顶!!!!! + 又上首页了 + 敢挖就敢看.... + 可屏蔽普通檀木观看 + 好多弹幕啊 + 2013、7、22.打卡,我是考古队,叫我。雷锋。 + 日常打卡 + 2013.7.22 + 2013.7.22 + 嗷嗷嗷 + searching for yousea + 都忘记发感叹了! + 敢挖我就敢看 + 2013.7.22 + 2013.7.22重看镇站之宝!!! + 又顶上首页了 + 考古队的胜利 + 膜拜~ + 2013/7/23 + 哈哈我刚刚顶上来的 + 怎么又挖出来 + 考古 + CL划过 + 神坟 + 2013 7 28 + 呵呵、 + 又挖上来了啊? + 2013.7.23 + 看不清 + 来一铲子 + 怎么又挖起来了。 + 2013.7.23 + 膜拜 + 居然不止我一人 + 神弹幕. + 无语.....几年前的啊!!! + 挖坟 + 挖坟 + 好燃 + 太强大 + green light + ?*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:? + + 敢顶敢看系列............... + 啊啦啦啦???? + 圣光在哪里!!! + 考古 + 2014.2.4 + 2013.7.24 敢挖我就敢看 + 敢顶我就敢看!!! + 敢顶敢看 7.24 + + 你敢挖我就敢看! + 2013.7.23签到 + 好强大 + 考古队 + 不能再只看了。 + 2013 7 24 + 不发个弹幕 对不起UP主啊 + 老坟 + up主大触啊! + 吃我一记洛阳铲 + 膜拜 + 考古 + 2013.07.25 + 就是那抹有感觉 + 2013.7.25 + 神弹幕!!! + 好棒啊!敢顶敢看! + 你好 + 日常考古 + 2013.7.25 + 其实我是来看弹慕 + 2013 7.25 + 2013.7.25.21:16签到 + 2013.7.25 + 7.25大卡 + 你敢挖我敢看系列! + 同步率好高 + 敢挖就敢看 + 燃燃燃燃燃燃燃 + 13.7.25 + 毫无ps痕迹 + 哪个八嘎挖上来的,害得我忍不住又看了一遍 + 天元突破= = + 神弹幕瞎了我一眼 + 2013.7.26 + 2013.7.26 + 发现宝了 + 看我洛阳铲 + 听说是敢挖就敢看系列,于是我顶上去吧, + 神马歌??? + 敢挖就敢看!? + NOmiss! + 目测要火 + 顶个 + 国语要崛起了 + 各种神弹幕 + + 挖了大坑 + 挖老坟啊~!~~~~!!! + 2013.7.26 + 7来考古 + 2013.7.25 + 2013.7.26 + 弹幕太美丽 + 回忆收藏 2013/7/26 + 次元突破啊 + 碉保 + 敢挖就敢看!!!! + 来看镇站之宝 + 画质好渣啊 + 神弹幕1!!!!!! + 考古队 + 赞!2013 7 27 + 弹幕太神了 同步率爆表啊 + 2013.7.27 + 围观来了 + 强大的神弹幕 + + 不止我一个人 + 2013.7.28 + 好多神弹幕 + 20130728 打卡 + 弹幕好美~ + 弹幕太美腻~ + 敢顶上来我就敢看 + 2013728 + 考古队 你们赢了 + 2013 7.28 打卡 + 我去 谁又把这个千年古坟挖出来的 + 2011 1-27 + 注意!!歌词是弹幕!!! + 没错!你发现一个神弹幕! + 额…… + 挖坟…… + 考古队 + 以前貌似看过一次 + 2013 7 29 19:19 + 到底又是谁挖出来的啊- - + 弹幕高能 + 2013.7.29.敢挖敢看+1 + 2013.7.30 + ( ⊙o⊙ )哇 + 特来考古 + 2013.07.30 11:33:40 + 20130730~~考古队报道 + 看了视频来了 2013-7-30 + 画质体现历史丫 + 神弹屏幕 + 原来这些动漫那么老了 + 2013.7.30 + 给力的弹幕 + 镇站之宝要顶 + 啦啦啦啦啦!!!! + 看见AB我就滚进来了 + AB + 敢挖敢看系列 + 你敢挖我敢看系列 + 又被挖上来了 + 敢顶我就敢看 + 2013.07.30 + 字幕好神奇 + 2013.07.30 + 围观镇站之宝 + 13.7.30 + 哇,我还以为是什么东西,搞了半天又是这个 + 2013.7.31 + 每日打卡2013-7-31 + 期待着一个幸运 . + UP主你头像是什么动漫? wobushixiaoxuesheng + 弹幕? + 9700多收藏 。。 + 神弹幕 + 神弹幕。。 + 欢迎你找到镇站二宝 bibibibibibibiibibibib!! + 每日打卡啊!!! + 挖坟报道 2013.8.1 + 千古菊粉!!!!! + 考古队!! 报道! + 考古队- - + 妈呀神弹幕! + 考古队你好 + 2013.8.1 + = =。当前居然只有我一个考古队员 + 考古队报道 + 另一个观众你好 + B站另外一宝是什么 我只是想知道.. + 叼就一个字,我只说一次。。 + 你们敢挖我就敢看 + 2013.8.1 + 原来这就是镇站之宝,摸摸,科考队前来考古 + 考古路过。 + 科学家在此 + 敢顶敢看系列 + 大家好我是屎黄色! + 我们是B站考古队!!! + 考古队2013.8.2 + 高级弹幕!!! + 逆向弹幕啊啊啊! + 高级弹幕啊啊啊啊!!! + 发弹幕求不卡 + 你敢挖我敢看 + 你敢挖我就敢看。。。。 + 谁挥动的洛阳铲? + 2013/8/2 + 嗨~~~ + 什么字幕啊、、、 + 8月3日签到 + 唯一 + 真燃 + 谁挖起来的太丧心病狂 + 怎么做的太厉害了 + UP主轻音蜜无误 + 既然挖上来了 就支持一下啊!! + 2013.8.3 + 这是今天的膝盖 + 妈妈,我长大了也要当考古队员!!!!!!!!! + 8月4号,挖出该坟 + 好强悍.... + 汗........ + 2013.8.3 敢挖敢看.. + 你敢挖我敢看系列! + 神弹幕 + 视频做的不错哦,赞个 + 万年巨坟 + 歌词好厉害 + - -真心不错 + 继续考古 + ?? + 好顶看 + 2013。8。4 17:45:51 + 2013.8.4 + - -信息量庞大 + 突破天际啊 + 2013.8.4 20:09 + 3大镇站法宝之一 + 由依呢? + 我又来了 + 打卡 + 又上来了 + 才发现 弹幕君好神奇的说!!!!!!!! + 说画质差的请看视频出的年代。好走不送 + 因为有人重制了他的视频。。。详情 绿光补完计画收藏1.2W+ + 卧槽 又被顶上来了啊 + 又来挖坟!o(︶︿︶)o + 考古队= =.. + 2013.8.5 + 燕姿燕姿~~ + 还有另一个= =.. + wa + 我们的BILIBILI + 2013 8 6 + 2013年8月6 + 不错 + 前来考古 + 还有位观众好 + 看了了一下午 + 2013.8.6 + 敢挖敢看系列 + 2013.8.6 + 神弹幕合影 + 敢顶敢看系列。 + 不可思议 + 任何意义如此的唯一。 + 慎剪辑。 + 神剪辑。 + 2013 8月7日 考古队员来此 + 围观各种神弹屏 + 考古 + 2013.08.07 + 各种神弹幕啊 + 饭弹幕 + 镇站之宝 + 2013.8.7留爪 + 2013.8.7 你敢挖我就敢看 + 2013.8.7 + DIAO ZHA TIAN~ + 谁把这古董又拉出来了 + 又顶上来了 + 卧槽 + 2013.8.7 + 我来挖个坟 + 镇站之宝啊~~~~~ + 签到 + 2013-08-07 + 看见由依就滚进来了 + 看见YUI喵就进来了 + 看镇站之宝 + 考古队前来~2013 8 7 + 201 + 敢挖就敢看! + 在哪里下载啊!!! + 你敢顶我就敢看 + 考古队友前来报道 + ↑发现神弹幕 + 2013-8-8 + 2013.8.8 敢挖就敢看 + 2013.8.8 + 新人+2 + 2015.7.2 + 13.08.08 + 考古队员2013. 8.8 留翔 + 如此真的大丈夫?? + dgasdgasgas + gadgadag + 2013/8/8 + 绅士 + 又定上来了 + 看坟,上香 + 挖挖更健康~~ + 我!们!是!考!古!队~~~ + 这是考古队的胜利~ + 每天来膜拜一次2013-08-09 + 2013.8.9 + 报道~ + 另外三个人,你们好~~ + 2013.8.9 + 日常打卡。。。为的是再看一眼神弹幕 + 考古队员报道 + 围观各种神弹幕 + 超级赞!! + 膜拜大神 + 超级赞!!!! + 硬币 + 考古主义的胜利 + 考古队路过 + 神剪辑。 + 2013.8.9 + 我顶!! + 专门来看神弹幕的,日常 + 字母好高级 + 谁挖的坟 + 2013.8.10~~~ + 官方挖坟,你想怎么样? + 挖出来了? 2013 08 10 + 神弹幕就是好。 + 敢挖就敢看系列~ + 日常洗脑 + 考古队在此 + 神弹幕 + 日常打卡只为再看一眼神字幕。。。神弹幕 + 考古 + 略燃 + ? + 看不清…………………… + 2013.08.10 + 路过 + 怎么又被挖上来了 + ?*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:? + + 2013.8.11据说是镇站大宝 + 高级弹幕啊! + 收藏要破万了啊 + 2013-08-12 + 考古队友日常打卡 2013.8.12 + 13.8.12.考古队。在此!!! + 大中华第一神迹 + 为我大中华人才济济干杯 + 、、、、翻墙去了niconico。。。那晚凌晨2点多还有人跟我一起顶 + 前方高能 + 美女驾到 + 你挖我看系列 + 8月13号圣火节23点,另外一个观众你好 + 高级弹幕好~~~ + 2013 8 14 + ↙2016笑了。。。今年才2015 + 2013 8 14 20:10 敢挖就敢看 + 又被瓦上了 + 看见封面就滚进来了 + 神弹幕 + 2013 8.14 + + 2013/8/15 留念 + 神弹幕 + 2013.8.15 + 20130815 + 你敢挖我就敢顶 + 2013.8.15 + 破万指日可待。 + 2013.8.15.20.45 + 2013.8.15签到 + 2013 8 15 复习 + =.= + 绿光在这里 + 我是来看考古队员的, + 生日打卡 + 我是红字君 + UP已经超于神了 + 终于看到EDEN了 + 永远的神作。。 + 2013.8.16 + 又挖起来了 + 20130816日常打卡 + 2013.8.14 + 吾辈来挖坟了...... + 2013 8 .17 + 2013.8.18 + + 挖坟穷三代,考古毁一生!!! + 挖坟穷三代,考古毁一生!!! + 挖坟穷三代,考古毁一生!!! + 挖坟穷三代,考古毁一生!!! + 挖坟穷三代,考古毁一生!!! + 挖坟穷三代,考古毁一生!!! + 挖坟穷三代,考古毁一生!!! + 挖坟穷三代,考古毁一生!!! + 挖坟穷三代,考古毁一生!!! + 2013.8.18考古路过 + 神大人出现、、 + 考古队的胜利!!! + 2013.8.18 + 二〇一三年八月十九日 01:30:16 + 2013.8.14 + 挖坟挖坟 + 又顶上来 + 卧槽自带弹幕? + 打卡 + 绿光?第一眼还以为是绿旋风 + 一闪而过的CL AS。。。 + 擦擦,弹幕歌词神了 + 敢顶敢看 + 各种神弹幕 求合影啊 打卡2013.8.20 + 考古 + 2013.8.20 + ?*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:??¨?*???*.: + .:*??*??.????*.: .:*??*??.???¨?*??*.:??¨?*???*.: .:*??*??.???¨?*??*.:? + + 挖坟...... + 2013 8.21 14.48 敢看敢挖! + 恭喜我发现镇站之宝! + 我是考古队我自豪2013.8.21 + 我来考古的· + 不知怎么地,赶脚配乐好神奇 + 考古的胜利 再度考古! + 敢挖就敢看?那我不客气的挖了 8月21来挖一下 2013留 + 挖几次就看几次 + 2013.8.22 + 2013、8、22、收藏夹 + 为什么这么屌? + 2013.8.22 20:25留 + 要不要挖一下这镇站之宝 + 收藏破万了- -赶紧顶起来的镇站之宝 + 顶一次 我就看一次 + 有點眼花繚亂 + 歌词神了 + 好多的弹幕、、、 + 咕~~(╯﹏╰)b + kaogudui + 2013.8.23 + 8.23.12时27分的7位小伙伴你们好 + 爲什麼是AV畫質 - - + 能再多点么。。 + 又来挖坟了 + 字幕厉害 + 弹屏好厉害mua! (*╯3╰) + 2013.8.23 + 2013.8.23 + 进度条君怎么又傲娇了 + 弹幕厉害 + 正在推荐B站 + 弹幕 震惊 神同步 + 前面那个8月23号的等我一下 + 考古队 + 高级弹幕 + 高级弹幕 + ⑨的算术~? + 看我洛阳铲!~ + 你敢挖我敢看系列 + 神弹幕!!!!! + 。。。大神...好强大! + 字幕吊炸天? + 小伙伴们泥萌嚎 + 他有上主页了.. + 2013.8.23 + 顶一次看一次 + 谁又挖出来了 + 挖坟 + 2013.8.24 + 2013.8.24 打卡 + 敢顶我就敢看! + 敢挖我就敢看!! + + 凛!!!! + 谁挖的远古巨坟 + 2013.08.24.22.53 大家好 此信息来自初音控~! + 考古队无敌了 + AV画质 + 再顶一次 + 大爱神曲0.0 + 2013.08.25 + 考古了 + 2013、8、25,打卡 + 膜拜神弹幕 + e + 诶?出屏的弹幕去哪儿了? + 只是为了和神弹幕合影 + 2013.8.25 + 2013.8.25 + 這畫質 + 各種神彈幕 + 狼辛第二季 + 这是谁??????????? + 2013 8 25 签到 + 看到镇站宝进来 + 差不多三年前的老坟 + 东方花神乐 + 优子 怒刷存在感 + 东方花神乐 + 敢挖就敢顶 + 这是什么 + B 丢 + 我们去考古吧 + 轻音!!! + 花音 + 剪! + 我看的不是AMV,是神弹幕! + 如此弹幕,废掉多少人参啊 + 2013-8-26 + 镇站之宝 + 考古胜利 + 千古巨坟, + 又上首页了。。。 + 看见AB我就点进来了 + 考古队前来报道 + 2013.。8。。26 + 考古走你 + 镇站之宝? + 2013.8.26! + 13.8、26 没事 挖挖坟。 + 前面 2016 2015 卖萌。 + 2013年⑧月27日 + 考古 + 2013.8.27上午9.43 + 老坟 + 镇站之宝2 + 好久的坑!!! + 撒花 + 2013-8-27 又是谁挖出来的 + 来一年了 我居然才知道有镇站之宝。!!!!! + 2013 08 27 + 每天都有人 + 一起看过 现在有印像了 这是镇店之宝? + 神的是弹幕的镇站 + 前來考古 + 考古队在此 + 2013.8.27 + 2013.8.87 + 考古2013.7.27 + 考古2013.8.27 + 敢挖敢看 + + 2013 8 27 + 每日一挖 + 考古什么的 是吧 + 日常考古 + 2013.8.27 + 1234567 还真有跟我同一天的 + ?*.: .:*??*??.???¨?* + 考古 + 2013.8.27 + 开学补签8.26 + 2013.8.27 + 08.27 + 专注考古30年! + 20138.28 日常打卡 + 日常打卡 + 你敢挖我就敢看系列 + 2013.8.28 + 2013.8.28 + TUT + 上古巨坟 + 好大一个坟 + 考古队发现镇站2宝~ + 弹幕逆天啦 + 镇站之宝才这点硬币 + 2013 8 28 + 2013.8.28 + 2013.8.28 + 镇店之宝 + 敢挖我就干看!!!!!1 + 2013-8-28 + 七星鲁王宫都没这口坟.老 + 2013 08 28 + 考古毁一生 + 考古队前来报到 + 简直就是狂欢 + 2013.8.29 + 2013—08—29又被顶上首页了 + 封见滚 + 吃我一记洛阳铲 + 2013.8.29 + 2013.8.29 + 镇站之宝 + 开学了 + 2013 8.29 23:29 + 敢挖敢看 2013.8.29 + 2013.8.30 + 赞一个 + av296938转战过来 + 这是镇站之宝啊 + 我现在才知道 + 视频做的好屌 + 敢挖敢看,考古队参上! + 好棒 + 考古队员8.31报道 + 2013.8.31 + 2013.8.31签到 + 2013.8.31 + 2013.08.31 + 2013.8.31再次考古 + 又被顶上来 + 每日一次 + 考古队报到 + 考古2013.9.1 + 大坑 + 这幽香出自什么那里!我要去补!!! + 这幽香出自什么那里!我要去补!!! + 考古队在此 + 好厉害 -0- + ka + 敢顶就敢看 + 弹幕为何这么吊 + 你敢顶我敢看系列 + 无敌的考古队~ + 考古 队太屌了。那么老都挖出来了。! + 我去这音乐 + 2013 9.3 + 我是来看神弹幕的 + 3013.9.3,考古队打卡 + 2013.9.3 + 2013.9.02 + 2013.09.03 + 萌狼 + 考古队员报到 + gong xi ni fa xcian zheng zhan zhi bao + 考古家在次 + 如此弹幕,废掉多少人槮啊 + 考古20139.5 神作就是这么屌 + 9 5 + 2013.9.5 + 神弹幕 up + 一下子软了 + 又被顶上来了 + 《绿光》补完計画av43243 + 《绿光》补完計画av43243 + 《绿光》补完計画av43243 + 《绿光》补完計画av43243 + 《绿光》补完計画av43243 + 《绿光》补完計画av43243 + 《绿光》补完計画av43243 + 《绿光》补完計画av43243 + 《绿光》补完計画av43243 + 《绿光》补完計画av43243 + 《绿光》补完計画av43243 + 《绿光》补完計画av43243 + 《绿光》补完計画av43243 + 《绿光》补完計画av43243 + 弹幕碉堡了 + 团长SOS + 2013.09.06 + 还在 + 敢挖我就敢看! + 2013,9,6首页祝贺 + 挖出来! + CC女王万岁!!!CC女王万岁!!!CC女王万岁!!! + 女王万岁!!!! + 2013.9.7 + 日常打卡 + 喂喂什么时候挖出来的 + 这才叫考古 + 2013.9.8 + 好棒!!~ + 我刚刚看见⑨了吗? + 考古对干得漂亮 + 恒古巨坟 + 你们敢顶上来我就敢看!! + 来考古 + kanade! + 神大人! + iwazawa! + ["7","348","1.00-1.00","4.50","期待着"] + ["7","348","1.00-1.00","4.50","期待着一个幸运"] + ["7","348","1.00-1.00","4.50","期待着一个幸运"] + ["7","348","1.00-1.00","4.50","期待着一个幸运和一个冲击"] + ["270","347","1.00-1.00","4.50","冲击"] + ["270","347","1.00-1.00","4.50","冲击"] + ["347","311","1.00-1.00","2.50","●●●●●●●"] + ["347","311","1.00-1.00","2.50","多么奇妙的际遇"] + ["347","311","1.00-1.00","2.50","多么奇妙的际遇"] + ["347","311","1.00-1.00","2.50","多么奇妙的际遇"] + ["4","308","1.00-1.00","2.50","〓〓〓〓〓〓〓"] + ["4","308","1.00-1.00","2.50","翻越过前面山顶"] + ["195","319","1.00-1.00","2.50","○○○○○"] + ["195","319","1.00-1.00","2.50","和层层白云"] + ["4","308","1.00-1.00","1.50","翻越过前面山顶"] + ["2","355","1.00-0.00","0.50","绿光在那里"] + ["162","357","1.00-0.00","0.50","绿光在那里"] + ["342","360","1.00-0.00","0.50","绿光在那里"] + ["342","360","1.00-0.00","0.50","绿光在那里"] + + ["12","245","1.00-0.00","0.50","触电般不可思议像一个奇迹","20","30"] + + + ["12","245","1.00-0.00","0.50","触电般不可思议像一个奇迹","20","30"] + + + ["12","245","1.00-0.00","0.50","触电般不可思议像一个奇迹","20","30"] + + + ["12","245","1.00-0.00","0.50","触电般不可思议像一个奇迹","20","30"] + + + ["12","245","1.00-0.00","0.50","触电般不可思议像一个奇迹","20","30"] + + + ["12","245","1.00-0.00","0.50","触电般不可思议像一个奇迹","20","30"] + + + ["12","245","1.00-0.00","0.50","触电般不可思议像一个奇迹","20","30"] + + + ["12","245","1.00-0.00","0.50","触电般不可思议像一个奇迹","20","30"] + + + ["12","245","1.00-0.00","0.50","触电般不可思议像一个奇迹","20","30"] + + /n/n/n/n/n/n/n/n/n/n/n/n/n 划过我的生命里 + /n划过我的生命里/n划过我的生命里/n划过我的生命里/n划过我的生命里/n/n + + /n/n/n/n/n/n/n/n/n/n/n/n 划过我的生命里 + /n划过我的生命里/n划过我的生命里/n划过我的生命里/n划过我的生命里/n/n/n + + /n/n/n/n/n/n/n/n/n/n/n 划过我的生命里 + /n划过我的生命里/n划过我的生命里/n划过我的生命里/n划过我的生命里/n/n/n/n + + /n/n/n/n/n/n/n/n/n/n 划过我的生命里 + /n划过我的生命里/n划过我的生命里/n划过我的生命里/n划过我的生命里/n/n/n/n/n + + ["184","345","1.00-0.00","2.50","●●●●●●●"] + ["184","345","1.00-0.00","2.50","不同于任何意义"] + ["184","345","1.00-0.00","2.50","■■■■■"] + ["184","345","1.00-0.00","2.50","你就是绿光"] + ["130","316","1.00-0.00","0.50","你就是绿光"] + ["299","298","1.00-0.00","0.50","你就是绿光"] + ["9","347","1.00-0.00","2.50","如此的唯一"] + ["9","347","1.00-0.00","1.50","   唯一"] + ["6","332","1.00-0.00","1.50","green","5","10"] + ["6","332","1.00-0.00","1.50"," + light","5","10"] + + ["6","332","1.00-0.00","1.50"," im","5","10"] + ["6","332","1.00-0.00","1.50"," im","5","10"] + ["6","332","1.00-0.00","1.50"," searching for + you","5","10"] + + ["6","332","1.00-0.00","1.50"," searching for + you","5","10"] + + ["6","332","1.00-0.00","0.50"," searching for + you","5","10"] + + ["8","288","1.00-0.00","2.50","always"] + ["22","319","1.00-0.00","2.50","always"] + ["57","349","1.00-0.00","2.50","always"] + ["362","346","1.00-0.00","2.50","不"] + ["362","346","1.00-0.00","2.50","不会"] + ["362","346","1.00-0.00","2.50","不会却"] + ["362","346","1.00-0.00","2.50","不会却步"] + ["9","339","1.00-0.00","2.50","哦珍爱"] + ["9","339","1.00-0.00","2.50"," 珍爱"] + ["130","357","1.00-0.00","2.50","不"] + ["130","357","1.00-0.00","2.50","不会"] + ["130","357","1.00-0.00","2.50","不会结"] + ["130","357","1.00-0.00","2.50","不会结束"] + /n/n/n/n/n/n/n/n/n/n/n/n/n green/n + /n/n/n/n/n/n/n/n/n/n/n/n/ngreen /n + /n/n/n/n/n/n/n/n/n/n/n/n light/n/n + /n/n/n/n/n/n/n/n/n/n/n/nlight /n/n + /n/n/n/n/n/n/n/n/n/n/n in/n/n/n + /n/n/n/n/n/n/n/n/n/n/nin /n/n/n + /n/n/n/n/n/n/n/n/n/n my/n/n/n/n + /n/n/n/n/n/n/n/n/n/nmy /n/n/n/n + /n/n/n/n/n/n/n/n/nlife life life life/n/n/n/n/n + + /n/n/n/n/n/n/n/n/nlife life life life/n/n/n/n/n + + /n/n/n/n/n/n/n/n/n/n/n/n/n□□□□□□□□□□□□ /n + /n/n/n/n/n/n/n/n/n/n/n/n/n遇见了一个传奇却如此熟悉 /n + /n/n/n/n/n/n/n/n/n/n/n/n/n遇 了 个 奇 如 熟 /n + /n/n/n/n/n/n/n/n/n/n/n/n ○○○○○○○/n/n + /n/n/n/n/n/n/n/n/n/n/n/n 在天空里的精灵/n/n + ["20","345","1.00-0.00","2.50","说一声"] + ["88","343","1.00-0.00","2.50","listen"] + /n/n/n/n/n/n/n/n/n/n/n/n◆◆◆◆◆ /n/n + /n/n/n/n/n/n/n/n/n/n/n/n有一道绿光 /n/n + /n/n/n/n/n/n/n/n/n/n/n/n/n●●●●● /n + /n/n/n/n/n/n/n/n/n/n/n/n/n有一道绿光 /n + /n/n/n/n/n/n/n/n/n/n/n▲▲▲▲▲ /n/n/n + /n/n/n/n/n/n/n/n/n/n/n有一道绿光 /n/n/n + ["131","148","1.00-0.00","2.00","幸"] + ["131","148","1.00-0.00","2.00","幸福"] + ["131","148","1.00-0.00","2.00","幸福在"] + ["131","148","1.00-0.00","2.00","幸福在哪"] + ["131","148","1.00-0.00","2.00","幸福在哪里"] + ["19","111","1.00-0.00","2.00","幸福在哪里"] + ["19","204","1.00-0.00","2.00","幸福在哪里"] + ["347","205","1.00-0.00","2.00","幸福在哪里"] + ["347","111","1.00-0.00","2.00","幸福在哪里"] + /n/n触/n电/n般/n不/n可/n思/n议/n像/n一/n个/n奇/n迹/n + /n/n触 /n电/n般/n不/n可/n思/n议/n像/n一/n个/n奇/n迹/n + /n/n触 /n电/n般/n不/n可/n思/n议/n像/n一/n个/n奇/n迹/n + /n/n触 /n电/n般/n不/n可/n思/n议/n像/n一/n个/n奇/n迹/n + /n/n触 /n电/n般/n不/n可/n思/n议/n像/n一/n个/n奇/n迹/n + /n/n触 /n电/n般/n不/n可/n思/n议/n像/n一/n个/n奇/n迹/n + /n/n触 /n电/n般/n不/n可/n思/n议/n像/n一/n个/n奇/n迹/n + ["1","326","1.00-0.00","1.00","划过我的生","35","0"] + + + ["455","1","1.00-0.00","1.00","划过我的生命里","35","0"] + + + ["2","271","1.00-0.00","0.50","划过我的生命里划过我","35","0"] + + + ["371","5","1.00-0.00","0.50","划过我的生命里划过我的生命里","35","0"] + + + ["2","212","1.00-0.00","0.50","划过我的生命里划过我的生命里划过","35","0"] + + + ["262","7","1.00-0.00","0.50","划过我的生命里划过我的生命里划过我的生命里","35","0"] + + + ["2","136","1.00-0.00","0.50","划过我的生命里划过我的过我的生命里划过我的生命","35","0"] + + + ["139","1","1.00-0.00","0.50","划过我的生命里划过我的生命里划过我的生命里划过我的生命里","35","0"] + + + ["3","2","1.00-0.00","0.50","划过我的生命里划过我的生命里划过我的生命里划过我的生命里划过我的生命里","35","0"] + + + ["3","2","1.00-0.00","0.50","划过我的生命里划过我的生命里划过我的生命里划过我的生命里划过我的生命里","35","0"] + + ["4","302","1.00-0.00","0.50","不","8","20"] + ["4","302","1.00-0.00","0.50","不同","8","20"] + ["4","302","1.00-0.00","0.50","不同于","8","20"] + ["90","332","1.00-0.00","1.00","任"] + ["90","332","1.00-0.00","1.00","任何"] + ["90","332","1.00-0.00","1.00","任何意"] + ["90","332","1.00-0.00","1.00","任何意义"] + + /n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n你就是绿光     你就是绿光     你就是绿光/n/n你就是绿光     你就是绿光     你就是绿光/n/n/n                             + + + /n/n/n/n/n/n/n/n/n/n/n/n/n/n/n   如此的唯一     如此的唯一     如此的唯一/n/n   如此的唯一     如此的唯一     如此的唯一/n/n/n/n               + + ["7","343","1.00-0.00","2.00","maybe"] + ["7","343","1.00-0.00","2.00","maybe its"] + ["7","343","1.00-0.00","2.00","maybe its myth"] + + ["7","343","1.00-0.00","2.00","maybe its myth im"] + ["7","343","1.00-0.00","2.00","maybe its myth im + seeking"] + + ["7","343","1.00-0.00","2.00","maybe its myth im + seeking"] + + ["10","366","1.00-0.00","2.00","you say"] + ["296","342","1.00-0.00","2.00","maybe its"] + ["296","342","1.00-0.00","2.00","maybe its a + wild"] + + ["296","342","1.00-0.00","2.00","maybe its a wild + dragon"] + + ["296","342","1.00-0.00","2.00","maybe its a wild + dragon"] + + ["296","364","1.00-0.00","2.00","chase anyway"] + + ["1","341","1.00-0.00","2.00","but"] + ["1","341","1.00-0.00","2.00"," still"] + ["1","341","1.00-0.00","2.00"," im"] + ["1","341","1.00-0.00","2.00"," gonna"] + ["1","341","1.00-0.00","2.00"," listen"] + ["1","341","1.00-0.00","2.00"," to"] + ["1","341","1.00-0.00","2.00"," my heart"] + ["1","341","1.00-0.00","2.00"," and try"] + ["1","341","1.00-0.00","2.00","pack"] + ["1","341","1.00-0.00","2.00"," up"] + ["1","341","1.00-0.00","2.00"," all"] + ["1","341","1.00-0.00","2.00"," my"] + ["1","341","1.00-0.00","2.00"," load"] + ["1","341","1.00-0.00","2.00"," so long"] + ["1","341","1.00-0.00","3.00","goodbye"] + ["1","341","0.00-1.00","3.00","goodbye"] + ["1","341","0.80-0.00","3.00","goodbye"] + ["1","341","0.00-1.00","3.00","goodbye"] + ["1","341","1.00-0.00","3.00","goodbye"] + ["1","341","1.00-0.00","4.00","goodbye"] + ["55","37","1.00-0.00","1.00","to me"] + ["292","267","1.00-0.00","1.00","to me"] + ["95","197","1.00-0.00","1.00","to me"] + ["369","95","1.00-0.00","1.00","to me"] + ["183","146","1.00-0.00","1.00","to me"] + ["424","214","1.00-0.00","1.00","to me"] + ["38","295","1.00-0.00","1.00","to me"] + ["409","344","1.00-0.00","1.00","to me"] + ["50","131","1.00-0.00","1.00","to me"] + ["297","223","1.00-0.00","1.00","to me"] + ["201","326","1.00-0.00","1.00","to me"] + ["319","80","1.00-0.00","1.00","to me"] + ["164","102","1.00-0.00","1.00","to me"] + ["404","187","1.00-0.00","1.00","to me"] + ["1","341","1.00-1.00","4.50","goodbye"] + ["1","341","1.00-0.00","6.00","goodbye"] + /n/n/n/n/n/n/n/n/n/n/n/n▁▁▁▁▁▁▁/n/n + /n/n/n/n/n/n/n/n/n/n/n/n green light /n/n + /n/n/n/n/n/n/n/n/n/n/n/n▍▍▍▍▍▍▍▍▍you/n/n + /n/n/n/n/n/n/n/n/n/n/n/nsearching for you/n/n + /n/n/n/n/n/n/n/n/n/n/nsearching for + you/n/nsearching for you/n + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n/n/n/n███              ███/n/n/n/n/n                    "] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n/n/n/nalways              always/n/n/n/n/n                    "] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n/n/n/n/n ███            ███/n/n/n/n                    "] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n/n/n/n/n always            always/n/n/n/n                    "] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n/n/n/n/n/n  ███          ███/n/n/n                    "] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n/n/n/n/n/n  always          always/n/n/n                    "] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n     不 不/n/n/n/n              "] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n/n     会 会/n/n/n              "] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n/n      却 却/n/n/n              "] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n      步 步/n/n/n/n              "] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n/n      却 却/n/n/n              "] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n/n     会 会/n/n/n              "] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n     不 不/n/n/n/n              "] + + ["14","340","1.00-0.00","1.50","哦"] + ["14","340","1.00-0.00","2.50","哦珍爱"] + ["14","340","1.00-0.00","2.50"," 不会结束"] + ["368","313","1.00-0.00","2.50","▁▁▁▁▁▁"] + ["368","313","1.00-0.00","2.50","green light"] + ["368","313","1.00-0.00","2.50","▁▁▁▁▁"] + ["368","313","1.00-0.00","2.50","in my life"] + + ["0","0","1.00-0.00","4.50","/n/n/n/n/n/n/n/n/n/n/n/n/n期                  期/n/n/n                    "] + + + ["0","0","1.00-0.00","4.50","/n/n/n/n/n/n/n/n/n/n/n/n 待                待/n/n/n/n                    "] + + + ["0","0","1.00-0.00","4.50","/n/n/n/n/n/n/n/n/n/n/n  着              着/n/n/n/n/n                    "] + + + ["0","0","1.00-0.00","4.50","/n/n/n/n/n/n/n/n/n个                  个/n 一                一/n/n/n/n/n/n                    "] + + + ["0","0","1.00-0.00","4.50","/n/n/n/n/n/n/n  运              运/n 幸                幸/n/n/n/n/n/n/n/n                    "] + + + ["0","0","1.00-0.00","4.50","/n/n/n/n/n一                  一/n 和                和/n/n/n/n/n/n/n/n/n/n                    "] + + + ["0","0","1.00-0.00","4.50","/n/n 击                击/n  冲              冲/n 个                个/n/n/n/n/n/n/n/n/n/n/n/n                    "] + + + /n/n ★/n  ★/n ★/n遇/n 际/n  的/n 妙/n奇/n 么/n  多/n ★/n★/n/n/n                     + + + /n/n                  ★/n                 ★/n                  ★/n                   遇/n                  际/n                 的/n                  妙/n/n/n/n/n/n/n/n                     + + + /n/n/n/n/n/n/n/n/n                   奇/n                  么/n                 多/n                  ★/n                   ★/n/n/n                     + + ["7","317","1.00-0.00","2.50","翻越过","30","0"] + ["72","356","1.00-0.00","2.50","前面山顶","330","0"] + ["176","304","1.00-0.00","2.50","和"] + + ["218","308","1.00-0.00","2.50","层层白云","30","0"] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n/n/n/n                 ▓/n                ▓ ▓/n               ▓   ▓/n/n/n                    "] + + + ["0","0","1.00-0.00","1.50","/n/n/n/n/n/n/n/n/n/n/n                 在/n                光 那/n               绿   里/n/n/n                    "] + + ["4","340","1.00-0.00","0.50","触"] + ["4","340","1.00-0.00","0.50","触电"] + ["4","340","1.00-0.00","0.50","触电般"] + ["4","340","1.00-0.00","0.50","触电般不"] + ["4","340","1.00-0.00","0.50","触电般不可"] + ["4","340","1.00-0.00","0.50","触电般不可思议"] + ["4","340","1.00-0.00","0.50","像"] + ["4","340","1.00-0.00","0.50","像一个"] + ["4","340","1.00-0.00","0.50","像一个奇迹"] + + ["209","340","1.00-0.00","1.50","划/n划/n划/n划/n划/n划/n/n/n/n/n/n/n/n/n/n/n                    "] + + + ["209","340","1.00-0.00","1.50"," 过/n 过/n 过/n 过/n 过/n 过/n/n/n/n/n/n/n/n/n/n/n                    "] + + + ["209","340","1.00-0.00","1.50","  我/n  我/n  我/n  我/n  我/n  我/n/n/n/n/n/n/n/n/n/n/n                    "] + + + ["209","340","1.00-0.00","1.50","   的/n   的/n   的/n   的/n   的/n   的/n/n/n/n/n/n/n/n/n/n/n                    "] + + + ["209","340","1.00-0.00","1.50","    生/n    生/n    生/n    生/n    生/n    生/n/n/n/n/n/n/n/n/n/n/n                    "] + + + ["209","340","1.00-0.00","1.50","     命/n     命/n     命/n     命/n     命/n     命/n/n/n/n/n/n/n/n/n/n/n                    "] + + + ["209","340","1.00-0.00","1.50","      里/n      里/n      里/n      里/n      里/n      里/n/n/n/n/n/n/n/n/n/n/n                    "] + + ["7","321","1.00-0.00","4.50","不同于任何意义"] + + ["8","386","1.00-0.00","4.50","不同于任何意义","180","180"] + + ["200","321","1.00-0.00","4.50","你就是绿光"] + + ["204","383","1.00-0.00","4.50","你就是绿光","180","180"] + + ["357","319","1.00-0.00","4.50","如"] + ["357","319","1.00-0.00","4.50"," 此"] + ["357","319","1.00-0.00","4.50"," 的"] + ["357","319","1.00-0.00","4.50"," 唯一"] + + ["357","383","1.00-0.00","4.50","如","180","180"] + + ["357","383","1.00-0.00","4.50"," + 此","180","180"] + + ["357","383","1.00-0.00","4.50"," + 的","180","180"] + + ["357","383","1.00-0.00","4.50"," + 唯一","180","180"] + + \ No newline at end of file diff --git a/Sample/src/main/res/values/dimens.xml b/Sample/src/main/res/values/dimens.xml index 47c82246..c8b56dbc 100644 --- a/Sample/src/main/res/values/dimens.xml +++ b/Sample/src/main/res/values/dimens.xml @@ -1,5 +1,5 @@ - 16dp - 16dp + 0dp + 0dp diff --git a/Sample/src/main/res/values/strings.xml b/Sample/src/main/res/values/strings.xml index 49930e35..af81954e 100644 --- a/Sample/src/main/res/values/strings.xml +++ b/Sample/src/main/res/values/strings.xml @@ -1,8 +1,9 @@ - + - Sample - Settings - Hello world! + Danmaku Flame Master + + Settings + diff --git a/build.gradle b/build.gradle index 495c5038..010584ed 100644 --- a/build.gradle +++ b/build.gradle @@ -1 +1 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. +// Top-level build file where you can add configuration options common to all sub-projects/modules. diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 28672728..9556125d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ -# -#Sun Aug 11 19:56:56 CST 2013 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.6-bin.zip +# +#Sun Aug 11 19:56:56 CST 2013 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=http\://services.gradle.org/distributions/gradle-1.6-bin.zip diff --git a/gradlew.bat b/gradlew.bat index 8a0b282a..aec99730 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,90 +1,90 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega