Search in sources :

Example 11 with IDanmakus

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;
}
Also used : BaseDanmaku(master.flame.danmaku.danmaku.model.BaseDanmaku) IDanmakus(master.flame.danmaku.danmaku.model.IDanmakus)

Example 12 with IDanmakus

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;
}
Also used : BaseDanmaku(master.flame.danmaku.danmaku.model.BaseDanmaku) IDanmakus(master.flame.danmaku.danmaku.model.IDanmakus) Danmakus(master.flame.danmaku.danmaku.model.android.Danmakus) IDanmakus(master.flame.danmaku.danmaku.model.IDanmakus)

Example 13 with IDanmakus

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");
    }
}
Also used : HashMap(java.util.HashMap) VideoView(android.widget.VideoView) Bitmap(android.graphics.Bitmap) BaseDanmaku(master.flame.danmaku.danmaku.model.BaseDanmaku) DanmakuTimer(master.flame.danmaku.danmaku.model.DanmakuTimer) IDanmakus(master.flame.danmaku.danmaku.model.IDanmakus) AndroidDisplayer(master.flame.danmaku.danmaku.model.android.AndroidDisplayer) IDanmakuView(master.flame.danmaku.controller.IDanmakuView) TextPaint(android.text.TextPaint) Paint(android.graphics.Paint) TextPaint(android.text.TextPaint) MediaPlayer(android.media.MediaPlayer)

Aggregations

IDanmakus (master.flame.danmaku.danmaku.model.IDanmakus)13 BaseDanmaku (master.flame.danmaku.danmaku.model.BaseDanmaku)8 Danmakus (master.flame.danmaku.danmaku.model.android.Danmakus)3 Canvas (android.graphics.Canvas)2 MediaPlayer (android.media.MediaPlayer)2 VideoView (android.widget.VideoView)2 HashMap (java.util.HashMap)2 IDanmakuView (master.flame.danmaku.controller.IDanmakuView)2 DanmakuTimer (master.flame.danmaku.danmaku.model.DanmakuTimer)2 SpecialDanmaku (master.flame.danmaku.danmaku.model.SpecialDanmaku)2 RenderingState (master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState)2 Bitmap (android.graphics.Bitmap)1 Paint (android.graphics.Paint)1 TextPaint (android.text.TextPaint)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 DataFormatException (java.util.zip.DataFormatException)1 ILoader (master.flame.danmaku.danmaku.loader.ILoader)1 IllegalDataException (master.flame.danmaku.danmaku.loader.IllegalDataException)1