use of master.flame.danmaku.danmaku.model.IDanmakus in project DanmakuFlameMaster by Bilibili.
the class Danmakus method sub.
@Override
public IDanmakus sub(long startTime, long endTime) {
if (items == null || items.size() == 0) {
return null;
}
if (subItems == null) {
if (mSortType == ST_BY_LIST) {
subItems = new Danmakus(Danmakus.ST_BY_LIST);
subItems.mLockObject = this.mLockObject;
synchronized (this.mLockObject) {
subItems.setItems(items);
}
} else {
subItems = new Danmakus(mDuplicateMergingEnabled);
subItems.mLockObject = this.mLockObject;
}
}
if (mSortType == ST_BY_LIST) {
return subItems;
}
if (startItem == null) {
startItem = createItem("start");
}
if (endItem == null) {
endItem = createItem("end");
}
if (subItems != null) {
long dtime = startTime - startItem.getActualTime();
if (dtime >= 0 && endTime <= endItem.getActualTime()) {
return subItems;
}
}
startItem.setTime(startTime);
endItem.setTime(endTime);
synchronized (this.mLockObject) {
subItems.setItems(((SortedSet<BaseDanmaku>) items).subSet(startItem, endItem));
}
return subItems;
}
use of master.flame.danmaku.danmaku.model.IDanmakus in project DanmakuFlameMaster by Bilibili.
the class DanmakuTouchHelper method touchHitDanmaku.
private IDanmakus touchHitDanmaku(final float x, final float y) {
final IDanmakus hitDanmakus = new Danmakus();
mDanmakuBounds.setEmpty();
IDanmakus danmakus = danmakuView.getCurrentVisibleDanmakus();
if (null != danmakus && !danmakus.isEmpty()) {
danmakus.forEachSync(new IDanmakus.DefaultConsumer<BaseDanmaku>() {
@Override
public int accept(BaseDanmaku danmaku) {
if (null != danmaku) {
mDanmakuBounds.set(danmaku.getLeft(), danmaku.getTop(), danmaku.getRight(), danmaku.getBottom());
if (mDanmakuBounds.contains(x, y)) {
hitDanmakus.addItem(danmaku);
}
}
return ACTION_CONTINUE;
}
});
}
return hitDanmakus;
}
use of master.flame.danmaku.danmaku.model.IDanmakus in project DanmakuFlameMaster by Bilibili.
the class UglyViewCacheStufferSampleActivity method findViews.
private void findViews() {
mMediaController = findViewById(R.id.media_controller);
mBtnRotate = (Button) findViewById(R.id.rotate);
mBtnHideDanmaku = (Button) findViewById(R.id.btn_hide);
mBtnShowDanmaku = (Button) findViewById(R.id.btn_show);
mBtnPauseDanmaku = (Button) findViewById(R.id.btn_pause);
mBtnResumeDanmaku = (Button) findViewById(R.id.btn_resume);
mBtnSendDanmaku = (Button) findViewById(R.id.btn_send);
mBtnSendDanmakuTextAndImage = (Button) findViewById(R.id.btn_send_image_text);
mBtnSendDanmakus = (Button) findViewById(R.id.btn_send_danmakus);
mBtnRotate.setOnClickListener(this);
mBtnHideDanmaku.setOnClickListener(this);
mMediaController.setOnClickListener(this);
mBtnShowDanmaku.setOnClickListener(this);
mBtnPauseDanmaku.setOnClickListener(this);
mBtnResumeDanmaku.setOnClickListener(this);
mBtnSendDanmaku.setOnClickListener(this);
mBtnSendDanmakuTextAndImage.setOnClickListener(this);
mBtnSendDanmakus.setOnClickListener(this);
// VideoView
VideoView mVideoView = (VideoView) findViewById(R.id.videoview);
// DanmakuView
// 设置最大显示行数
HashMap<Integer, Integer> maxLinesPair = new HashMap<Integer, Integer>();
// 滚动弹幕最大显示5行
maxLinesPair.put(BaseDanmaku.TYPE_SCROLL_RL, 5);
// 设置是否禁止重叠
HashMap<Integer, Boolean> overlappingEnablePair = new HashMap<Integer, Boolean>();
overlappingEnablePair.put(BaseDanmaku.TYPE_SCROLL_RL, true);
overlappingEnablePair.put(BaseDanmaku.TYPE_FIX_TOP, true);
mDanmakuView = (IDanmakuView) findViewById(R.id.sv_danmaku);
mContext = DanmakuContext.create();
mIconWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30f, getResources().getDisplayMetrics());
mContext.setDanmakuBold(true);
mContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3).setDuplicateMergingEnabled(false).setScrollSpeedFactor(1.2f).setScaleTextSize(1.2f).setCacheStuffer(new ViewCacheStuffer<MyViewHolder>() {
@Override
public MyViewHolder onCreateViewHolder(int viewType) {
Log.e("DFM", "onCreateViewHolder:" + viewType);
return new MyViewHolder(View.inflate(getApplicationContext(), R.layout.layout_view_cache, null));
}
@Override
public void onBindViewHolder(int viewType, MyViewHolder viewHolder, BaseDanmaku danmaku, AndroidDisplayer.DisplayerConfig displayerConfig, TextPaint paint) {
if (paint != null)
viewHolder.mText.getPaint().set(paint);
viewHolder.mText.setText(danmaku.text);
viewHolder.mText.setTextColor(danmaku.textColor);
viewHolder.mText.setTextSize(TypedValue.COMPLEX_UNIT_PX, danmaku.textSize);
Bitmap bitmap = null;
MyImageWare imageWare = (MyImageWare) danmaku.tag;
if (imageWare != null) {
bitmap = imageWare.bitmap;
if (danmaku.text.toString().contains("textview")) {
Log.e("DFM", "onBindViewHolder======> bitmap:" + (bitmap == null) + " " + danmaku.tag + "url:" + imageWare.getImageUri());
}
}
if (bitmap != null) {
viewHolder.mIcon.setImageBitmap(bitmap);
if (danmaku.text.toString().contains("textview")) {
Log.e("DFM", "onBindViewHolder======>" + danmaku.tag + "url:" + imageWare.getImageUri());
}
} else {
viewHolder.mIcon.setImageResource(R.drawable.ic_launcher);
}
}
@Override
public void releaseResource(BaseDanmaku danmaku) {
MyImageWare imageWare = (MyImageWare) danmaku.tag;
if (imageWare != null) {
ImageLoader.getInstance().cancelDisplayTask(imageWare);
}
danmaku.setTag(null);
Log.e("DFM", "releaseResource url:" + danmaku.text);
}
String[] avatars = { "http://i0.hdslb.com/bfs/face/e13fcb94342c325debb2d3a1d9e503ac4f083514.jpg@45w_45h.webp", "http://i0.hdslb.com/bfs/bangumi/2558e1341d2e934a7e06bb7d92551fef5c82c172.jpg@72w_72h.webp", "http://i0.hdslb.com/bfs/face/128edefeef7ce9cfc443a2489d8a1c7d44d88b80.jpg@72w_72h.webp" };
@Override
public void prepare(BaseDanmaku danmaku, boolean fromWorkerThread) {
if (danmaku.isTimeOut()) {
return;
}
MyImageWare imageWare = (MyImageWare) danmaku.tag;
if (imageWare == null) {
String avatar = avatars[danmaku.index % avatars.length];
imageWare = new MyImageWare(avatar, danmaku, mIconWidth, mIconWidth, mDanmakuView);
danmaku.setTag(imageWare);
}
if (danmaku.text.toString().contains("textview")) {
Log.e("DFM", "onAsyncLoadResource======>" + danmaku.tag + "url:" + imageWare.getImageUri());
}
ImageLoader.getInstance().displayImage(imageWare.getImageUri(), imageWare);
}
}, // 图文混排使用SpannedCacheStuffer
null).setMaximumLines(maxLinesPair).preventOverlapping(overlappingEnablePair);
if (mDanmakuView != null) {
mParser = createParser(this.getResources().openRawResource(R.raw.comments));
mDanmakuView.setCallback(new master.flame.danmaku.controller.DrawHandler.Callback() {
@Override
public void updateTimer(DanmakuTimer timer) {
}
@Override
public void drawingFinished() {
}
@Override
public void danmakuShown(BaseDanmaku danmaku) {
// Log.d("DFM", "danmakuShown(): text=" + danmaku.text);
}
@Override
public void prepared() {
mDanmakuView.start();
}
});
mDanmakuView.setOnDanmakuClickListener(new IDanmakuView.OnDanmakuClickListener() {
@Override
public boolean onDanmakuClick(IDanmakus danmakus) {
Log.d("DFM", "onDanmakuClick: danmakus size:" + danmakus.size());
BaseDanmaku latest = danmakus.last();
if (null != latest) {
Log.d("DFM", "onDanmakuClick: text of latest danmaku:" + latest.text);
return true;
}
return false;
}
@Override
public boolean onViewClick(IDanmakuView view) {
mMediaController.setVisibility(View.VISIBLE);
return false;
}
});
mDanmakuView.prepare(mParser, mContext);
mDanmakuView.showFPS(true);
mDanmakuView.enableDanmakuDrawingCache(true);
}
if (mVideoView != null) {
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});
mVideoView.setVideoPath(Environment.getExternalStorageDirectory() + "/1.flv");
}
}
Aggregations