美文网首页Android
仿今日头条播放——依赖饺子播放器

仿今日头条播放——依赖饺子播放器

作者: 吃泥巴的猫 | 来源:发表于2018-12-18 16:04 被阅读2次

    先附上饺子播放器github地址
    JiaoZiVideoPlayer

    效果图
    如效果图,主要修改为在无wifi网络状态下的提示样式,也就是说需要重写UI,此处参考饺子播放器的JzvdStd重写了UI,UI布局文件如下:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorBlack"
        android:descendantFocusability="blocksDescendants">
        <!-- 播放器 -->
        <FrameLayout
            android:id="@+id/surface_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
        </FrameLayout>
    
        <!-- 缩略图 -->
        <ImageView
            android:id="@+id/thumb"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:background="#F6F6F6"
            android:scaleType="fitCenter" />
    
        <!-- 标题栏 -->
        <RelativeLayout
            android:id="@+id/layout_top"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:background="@drawable/jz_title_bg"
            android:paddingLeft="10dp"
            android:paddingStart="10dp"
            android:visibility="gone">
    
            <ImageView
                android:id="@+id/back"
                android:layout_width="26dp"
                android:layout_height="26dp"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true"
                android:layout_marginTop="12dp"
                android:padding="3dp"
                android:scaleType="centerInside"
                android:src="@drawable/jz_click_back_selector" />
    
            <TextView
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginEnd="12dp"
                android:layout_marginRight="12dp"
                android:layout_toEndOf="@id/back"
                android:layout_toLeftOf="@id/battery_time_layout"
                android:layout_toRightOf="@id/back"
                android:ellipsize="end"
                android:maxLines="2"
                android:textColor="#ffffff"
                android:textSize="18sp" />
    
            <LinearLayout
                android:id="@+id/battery_time_layout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginEnd="14dp"
                android:layout_marginRight="14dp"
                android:gravity="center_vertical"
                android:orientation="vertical"
                android:visibility="invisible">
    
                <ImageView
                    android:id="@+id/battery_level"
                    android:layout_width="23dp"
                    android:layout_height="10dp"
                    android:layout_gravity="center_horizontal"
                    android:background="@drawable/jz_battery_level_10" />
    
                <TextView
                    android:id="@+id/video_current_time"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:gravity="center_vertical"
                    android:maxLines="1"
                    android:textColor="#ffffffff"
                    android:textSize="12.0sp" />
            </LinearLayout>
        </RelativeLayout>
        <!-- 全屏退出 -->
        <ImageView
            android:id="@+id/back_tiny"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:layout_marginLeft="6dp"
            android:layout_marginTop="6dp"
            android:background="@drawable/jz_click_back_tiny_selector"
            android:visibility="gone" />
        <!-- 加载菊花 -->
        <ProgressBar
            android:id="@+id/loading"
            android:layout_width="@dimen/jz_start_button_w_h_normal"
            android:layout_height="@dimen/jz_start_button_w_h_normal"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:indeterminateDrawable="@drawable/jz_loading"
            android:visibility="invisible" />
    
        <!-- 居中播放按钮 -->
        <LinearLayout
            android:id="@+id/start_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_gravity="center_vertical">
    
            <ImageView
                android:id="@+id/start"
                android:layout_width="@dimen/jz_start_button_w_h_normal"
                android:layout_height="@dimen/jz_start_button_w_h_normal"
                android:src="@drawable/video" />
    
        </LinearLayout>
    
        <!-- 再次播放文字提示 -->
        <TextView
            android:id="@+id/replay_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/start_layout"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="6dp"
            android:text="@string/replay"
            android:textColor="#ffffff"
            android:textSize="12sp"
            android:visibility="invisible" />
    
        <!-- 中间提示框 -->
        <RelativeLayout
            android:id="@+id/tip_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#aa333333"
            android:visibility="invisible">
            <!-- 加载失败,重试 -->
            <LinearLayout
                android:id="@+id/retry_layout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:gravity="center_horizontal"
                android:orientation="vertical"
                android:visibility="invisible">
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/common_video_erro"
                    android:textColor="@android:color/white"
                    android:textSize="14sp" />
    
                <TextView
                    android:id="@+id/retry_btn"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="15dp"
                    android:background="@drawable/video_btn_bg"
                    android:paddingBottom="4dp"
                    android:paddingLeft="9dp"
                    android:paddingRight="9dp"
                    android:paddingTop="4dp"
                    android:text="@string/common_click_try"
                    android:textColor="@android:color/white"
                    android:textSize="14sp" />
            </LinearLayout>
            <!-- 流量状态,继续播放-->
            <LinearLayout
                android:id="@+id/continue_play_layout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:gravity="center_horizontal"
                android:orientation="vertical"
                android:visibility="invisible">
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/common_no_wifi"
                    android:textColor="@android:color/white"
                    android:textSize="16sp" />
    
                <TextView
                    android:id="@+id/continue_play_btn"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="15dp"
                    android:background="@drawable/video_btn_bg"
                    android:paddingBottom="4dp"
                    android:paddingLeft="9dp"
                    android:paddingRight="9dp"
                    android:paddingTop="4dp"
                    android:text="@string/common_continue_play"
                    android:textColor="@android:color/white"
                    android:textSize="14sp" />
            </LinearLayout>
        </RelativeLayout>
    
        <!-- 底边栏 -->
        <LinearLayout
            android:id="@+id/layout_bottom"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:background="#4B333333"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            android:visibility="invisible">
    
            <TextView
                android:id="@+id/current"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="14dp"
                android:text="00:00"
                android:textColor="#ffffff"
                android:textSize="12sp" />
    
            <SeekBar
                android:id="@+id/bottom_seek_progress"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1.0"
                android:background="@null"
                android:max="100"
                android:maxHeight="1dp"
                android:minHeight="1dp"
                android:paddingBottom="8dp"
                android:paddingLeft="12dp"
                android:paddingRight="12dp"
                android:paddingTop="8dp"
                android:progressDrawable="@drawable/jz_bottom_seek_progress"
                android:thumb="@drawable/video_bottom_seek_bar" />
    
            <TextView
                android:id="@+id/total"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="00:00"
                android:textColor="#ffffff"
                android:textSize="12sp" />
    
            <TextView
                android:id="@+id/clarity"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:clickable="true"
                android:paddingLeft="20dp"
                android:text="clarity"
                android:textAlignment="center"
                android:textColor="#ffffff" />
    
            <ImageView
                android:id="@+id/fullscreen"
                android:layout_width="45dp"
                android:layout_height="fill_parent"
                android:paddingLeft="14dp"
                android:paddingRight="14dp"
                android:scaleType="centerInside"
                android:src="@drawable/common_full_screen" />
        </LinearLayout>
        <ProgressBar
            android:id="@+id/bottom_progress"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="match_parent"
            android:layout_height="1.5dp"
            android:layout_alignParentBottom="true"
            android:max="100"
            android:progressDrawable="@drawable/jz_bottom_progress" />
    
    </RelativeLayout>
    

    中间提示框部分为加载错误提示,以及流量状态下是否继续播放的提示
    一些资源文件懒得上传了。。。就是些图片或者shape
    播放器类,需要重写Jzvd,重写方法可参考JzvdStd,此处基本照搬JzvdStd,只是修改了onClick的一部分方法,和修改了showWifiDialog()方法

    public class VideoPlayerWidget extends Jzvd {
    
        protected static Timer DISMISS_CONTROL_VIEW_TIMER;
    
        //返回
        public ImageView backButton;
        //底部进度条,加载菊花
        public ProgressBar bottomProgressBar, loadingProgressBar;
        //视频标题
        public TextView titleTextView;
        //缩略图
        public ImageView thumbImageView;
        //全屏退出
        public ImageView tinyBackImageView;
        //电量显示
        public LinearLayout batteryTimeLayout;
        public ImageView batteryLevel;
        //系统时间
        public TextView videoCurrentTime;
        //播放完成再次播放
        public TextView replayTextView;
        //清晰度
        public TextView clarity;
        public PopupWindow clarityPopWindow;
        //提示蒙图层
        public RelativeLayout tipLayout;
        //加载失败,点击重试
        public LinearLayout mRetryLayout;
        public TextView mRetryBtn;
        //流量状态,提示继续
        public LinearLayout mContinuePlayLayout;
        public TextView mContinuePlayBtn;
    
        protected DismissControlViewTimerTask mDismissControlViewTimerTask;
        protected Dialog mProgressDialog;
        protected ProgressBar mDialogProgressBar;
        protected TextView mDialogSeekTime;
        protected TextView mDialogTotalTime;
        protected ImageView mDialogIcon;
        protected Dialog mVolumeDialog;
        protected ProgressBar mDialogVolumeProgressBar;
        protected TextView mDialogVolumeTextView;
        protected ImageView mDialogVolumeImageView;
        protected Dialog mBrightnessDialog;
        protected ProgressBar mDialogBrightnessProgressBar;
        protected TextView mDialogBrightnessTextView;
    
        public static long LAST_GET_BATTERYLEVEL_TIME = 0;
        public static int LAST_GET_BATTERYLEVEL_PERCENT = 70;
    
        private BroadcastReceiver battertReceiver = new BroadcastReceiver() {
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
                    int level = intent.getIntExtra("level", 0);
                    int scale = intent.getIntExtra("scale", 100);
                    int percent = level * 100 / scale;
                    LAST_GET_BATTERYLEVEL_PERCENT = percent;
                    setBatteryLevel();
                    getContext().unregisterReceiver(battertReceiver);
                }
            }
        };
    
        public VideoPlayerWidget(Context context) {
            super(context);
        }
    
        public VideoPlayerWidget(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @Override
        public void init(Context context) {
            super.init(context);
            batteryTimeLayout = findViewById(R.id.battery_time_layout);
            bottomProgressBar = findViewById(R.id.bottom_progress);
            titleTextView = findViewById(R.id.title);
            backButton = findViewById(R.id.back);
            thumbImageView = findViewById(R.id.thumb);
            loadingProgressBar = findViewById(R.id.loading);
            batteryLevel = findViewById(R.id.battery_level);
            videoCurrentTime = findViewById(R.id.video_current_time);
            replayTextView = findViewById(R.id.replay_text);
            mRetryBtn = findViewById(R.id.retry_btn);
            mRetryLayout = findViewById(R.id.retry_layout);
            tinyBackImageView = findViewById(R.id.back_tiny);
            clarity = findViewById(R.id.clarity);
            tipLayout = findViewById(R.id.tip_layout);
            mContinuePlayLayout = findViewById(R.id.continue_play_layout);
            mContinuePlayBtn = findViewById(R.id.continue_play_btn);
            thumbImageView.setOnClickListener(this);
            backButton.setOnClickListener(this);
            mRetryBtn.setOnClickListener(this);
            mContinuePlayBtn.setOnClickListener(this);
        }
    
        public void setUp(JZDataSource jzDataSource, int screen) {
            super.setUp(jzDataSource, screen);
            titleTextView.setText(jzDataSource.title);
            if (currentScreen == SCREEN_WINDOW_FULLSCREEN) {
                fullscreenButton.setImageResource(R.drawable.jz_shrink);
                backButton.setVisibility(View.VISIBLE);
                tinyBackImageView.setVisibility(View.INVISIBLE);
                batteryTimeLayout.setVisibility(View.VISIBLE);
                if (jzDataSource.urlsMap.size() == 1) {
                    clarity.setVisibility(GONE);
                } else {
                    clarity.setText(jzDataSource.getCurrentKey().toString());
                    clarity.setVisibility(View.VISIBLE);
                }
                changeStartButtonSize((int) getResources().getDimension(R.dimen.jz_start_button_w_h_fullscreen));
            } else if (currentScreen == SCREEN_WINDOW_NORMAL
                    || currentScreen == SCREEN_WINDOW_LIST) {
                fullscreenButton.setImageResource(R.drawable.common_full_screen);
                backButton.setVisibility(View.GONE);
                tinyBackImageView.setVisibility(View.INVISIBLE);
                changeStartButtonSize((int) getResources().getDimension(R.dimen.jz_start_button_w_h_normal));
                batteryTimeLayout.setVisibility(View.GONE);
                clarity.setVisibility(View.GONE);
            } else if (currentScreen == SCREEN_WINDOW_TINY) {
                tinyBackImageView.setVisibility(View.VISIBLE);
                setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE,
                        View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE);
                batteryTimeLayout.setVisibility(View.GONE);
                clarity.setVisibility(View.GONE);
            }
            setSystemTimeAndBattery();
        }
    
        @Override
        public int getLayoutId() {
            return R.layout.layout_video_widget;
        }
    
        public void changeStartButtonSize(int size) {
            ViewGroup.LayoutParams lp = startButton.getLayoutParams();
            lp.height = size;
            lp.width = size;
            lp = loadingProgressBar.getLayoutParams();
            lp.height = size;
            lp.width = size;
        }
    
        @Override
        public void onStateNormal() {
            super.onStateNormal();
            changeUiToNormal();
        }
    
        @Override
        public void onStatePreparing() {
            super.onStatePreparing();
            changeUiToPreparing();
        }
    
        @Override
        public void changeUrl(int urlMapIndex, long seekToInAdvance) {
            super.changeUrl(urlMapIndex, seekToInAdvance);
            startButton.setVisibility(INVISIBLE);
            replayTextView.setVisibility(View.GONE);
            mRetryLayout.setVisibility(View.GONE);
        }
    
        @Override
        public void changeUrl(JZDataSource jzDataSource, long seekToInAdvance) {
            super.changeUrl(jzDataSource, seekToInAdvance);
            titleTextView.setText(jzDataSource.title);
            startButton.setVisibility(INVISIBLE);
            replayTextView.setVisibility(View.GONE);
            mRetryLayout.setVisibility(View.GONE);
        }
    
        @Override
        public void onStatePlaying() {
            super.onStatePlaying();
            changeUiToPlayingClear();
        }
    
        @Override
        public void onStatePause() {
            super.onStatePause();
            changeUiToPauseShow();
            cancelDismissControlViewTimer();
        }
    
        @Override
        public void onStateError() {
            super.onStateError();
            changeUiToError();
        }
    
        @Override
        public void onStateAutoComplete() {
            super.onStateAutoComplete();
            changeUiToComplete();
            cancelDismissControlViewTimer();
            bottomProgressBar.setProgress(100);
        }
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int id = v.getId();
            if (id == cn.jzvd.R.id.surface_container) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        break;
                    case MotionEvent.ACTION_MOVE:
                        break;
                    case MotionEvent.ACTION_UP:
                        startDismissControlViewTimer();
                        if (mChangePosition) {
                            long duration = getDuration();
                            int progress = (int) (mSeekTimePosition * 100 / (duration == 0 ? 1 : duration));
                            bottomProgressBar.setProgress(progress);
                        }
                        if (!mChangePosition && !mChangeVolume) {
                            onEvent(JZUserActionStd.ON_CLICK_BLANK);
                            onClickUiToggle();
                        }
                        break;
                }
            } else if (id == cn.jzvd.R.id.bottom_seek_progress) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        cancelDismissControlViewTimer();
                        break;
                    case MotionEvent.ACTION_UP:
                        startDismissControlViewTimer();
                        break;
                }
            }
            return super.onTouch(v, event);
        }
    
        @Override
        public void onClick(View v) {
            super.onClick(v);
            int i = v.getId();
            if (i == R.id.thumb) {
                if (jzDataSource == null || jzDataSource.urlsMap.isEmpty() || jzDataSource.getCurrentUrl() == null) {
                    Toast.makeText(getContext(), getResources().getString(cn.jzvd.R.string.no_url), Toast.LENGTH_SHORT).show();
                    return;
                }
                if (currentState == CURRENT_STATE_NORMAL) {
                    if (!jzDataSource.getCurrentUrl().toString().startsWith("file") &&
                            !jzDataSource.getCurrentUrl().toString().startsWith("/") &&
                            !JZUtils.isWifiConnected(getContext()) && !WIFI_TIP_DIALOG_SHOWED) {
                        showWifiDialog();
                        return;
                    }
                    startVideo();
                    onEvent(JZUserActionStd.ON_CLICK_START_THUMB);//开始的事件应该在播放之后,此处特殊
                } else if (currentState == CURRENT_STATE_AUTO_COMPLETE) {
                    onClickUiToggle();
                }
            } else if (i == cn.jzvd.R.id.surface_container) {
                startDismissControlViewTimer();
            } else if (i == cn.jzvd.R.id.back) {
                backPress();
            } else if (i == cn.jzvd.R.id.back_tiny) {
                if (JzvdMgr.getFirstFloor().currentScreen == Jzvd.SCREEN_WINDOW_LIST) {
                    quitFullscreenOrTinyWindow();
                } else {
                    backPress();
                }
            } else if (i == cn.jzvd.R.id.clarity) {
                LayoutInflater inflater = (LayoutInflater) getContext()
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                final LinearLayout layout = (LinearLayout) inflater.inflate(cn.jzvd.R.layout.jz_layout_clarity, null);
    
                OnClickListener mQualityListener = new OnClickListener() {
                    public void onClick(View v) {
                        int index = (int) v.getTag();
                        changeUrl(index, getCurrentPositionWhenPlaying());
                        clarity.setText(jzDataSource.getCurrentKey().toString());
                        for (int j = 0; j < layout.getChildCount(); j++) {//设置点击之后的颜色
                            if (j == jzDataSource.currentUrlIndex) {
                                ((TextView) layout.getChildAt(j)).setTextColor(Color.parseColor("#fff85959"));
                            } else {
                                ((TextView) layout.getChildAt(j)).setTextColor(Color.parseColor("#ffffff"));
                            }
                        }
                        if (clarityPopWindow != null) {
                            clarityPopWindow.dismiss();
                        }
                    }
                };
    
                for (int j = 0; j < jzDataSource.urlsMap.size(); j++) {
                    String key = jzDataSource.getKeyFromDataSource(j);
                    TextView clarityItem = (TextView) View.inflate(getContext(), cn.jzvd.R.layout.jz_layout_clarity_item, null);
                    clarityItem.setText(key);
                    clarityItem.setTag(j);
                    layout.addView(clarityItem, j);
                    clarityItem.setOnClickListener(mQualityListener);
                    if (j == jzDataSource.currentUrlIndex) {
                        clarityItem.setTextColor(Color.parseColor("#fff85959"));
                    }
                }
    
                clarityPopWindow = new PopupWindow(layout, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true);
                clarityPopWindow.setContentView(layout);
                clarityPopWindow.showAsDropDown(clarity);
                layout.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
                int offsetX = clarity.getMeasuredWidth() / 3;
                int offsetY = clarity.getMeasuredHeight() / 3;
                clarityPopWindow.update(clarity, -offsetX, -offsetY, Math.round(layout.getMeasuredWidth() * 2), layout.getMeasuredHeight());
            } else if (i == cn.jzvd.R.id.retry_btn) {
                if (jzDataSource.urlsMap.isEmpty() || jzDataSource.getCurrentUrl() == null) {
                    Toast.makeText(getContext(), getResources().getString(cn.jzvd.R.string.no_url), Toast.LENGTH_SHORT).show();
                    return;
                }
                if (!jzDataSource.getCurrentUrl().toString().startsWith("file") && !
                        jzDataSource.getCurrentUrl().toString().startsWith("/") &&
                        !JZUtils.isWifiConnected(getContext()) && !WIFI_TIP_DIALOG_SHOWED) {
                    showWifiDialog();
                    return;
                }
                initTextureView();//和开始播放的代码重复
                addTextureView();
                JZMediaManager.setDataSource(jzDataSource);
                onStatePreparing();
                onEvent(JZUserAction.ON_CLICK_START_ERROR);
            } else if (i == R.id.continue_play_btn) {
                onEvent(JZUserActionStd.ON_CLICK_START_WIFIDIALOG);
                startVideo();
                WIFI_TIP_DIALOG_SHOWED = true;
                tipLayout.setVisibility(INVISIBLE);
                bottomContainer.setVisibility(VISIBLE);
            }
        }
    
        @Override
        public void showWifiDialog() {
            super.showWifiDialog();
            tipLayout.setVisibility(VISIBLE);
            mContinuePlayLayout.setVisibility(VISIBLE);
        }
    
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            super.onStartTrackingTouch(seekBar);
            cancelDismissControlViewTimer();
        }
    
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            super.onStopTrackingTouch(seekBar);
            startDismissControlViewTimer();
        }
    
        public void onClickUiToggle() {
            if (bottomContainer.getVisibility() != View.VISIBLE) {
                setSystemTimeAndBattery();
                clarity.setText(jzDataSource.getCurrentKey().toString());
            }
            if (currentState == CURRENT_STATE_PREPARING) {
                changeUiToPreparing();
                if (bottomContainer.getVisibility() == View.VISIBLE) {
                } else {
                    setSystemTimeAndBattery();
                }
            } else if (currentState == CURRENT_STATE_PLAYING) {
                if (bottomContainer.getVisibility() == View.VISIBLE) {
                    changeUiToPlayingClear();
                } else {
                    changeUiToPlayingShow();
                }
            } else if (currentState == CURRENT_STATE_PAUSE) {
                if (bottomContainer.getVisibility() == View.VISIBLE) {
                    changeUiToPauseClear();
                } else {
                    changeUiToPauseShow();
                }
            }
        }
    
        public void setSystemTimeAndBattery() {
            SimpleDateFormat dateFormater = new SimpleDateFormat("HH:mm");
            Date date = new Date();
            videoCurrentTime.setText(dateFormater.format(date));
            if ((System.currentTimeMillis() - LAST_GET_BATTERYLEVEL_TIME) > 30000) {
                LAST_GET_BATTERYLEVEL_TIME = System.currentTimeMillis();
                getContext().registerReceiver(
                        battertReceiver,
                        new IntentFilter(Intent.ACTION_BATTERY_CHANGED)
                );
            } else {
                setBatteryLevel();
            }
        }
    
        public void setBatteryLevel() {
            int percent = LAST_GET_BATTERYLEVEL_PERCENT;
            if (percent < 15) {
                batteryLevel.setBackgroundResource(cn.jzvd.R.drawable.jz_battery_level_10);
            } else if (percent >= 15 && percent < 40) {
                batteryLevel.setBackgroundResource(cn.jzvd.R.drawable.jz_battery_level_30);
            } else if (percent >= 40 && percent < 60) {
                batteryLevel.setBackgroundResource(cn.jzvd.R.drawable.jz_battery_level_50);
            } else if (percent >= 60 && percent < 80) {
                batteryLevel.setBackgroundResource(cn.jzvd.R.drawable.jz_battery_level_70);
            } else if (percent >= 80 && percent < 95) {
                batteryLevel.setBackgroundResource(cn.jzvd.R.drawable.jz_battery_level_90);
            } else if (percent >= 95 && percent <= 100) {
                batteryLevel.setBackgroundResource(cn.jzvd.R.drawable.jz_battery_level_100);
            }
        }
    
        public void onCLickUiToggleToClear() {
            if (currentState == CURRENT_STATE_PREPARING) {
                if (bottomContainer.getVisibility() == View.VISIBLE) {
                    changeUiToPreparing();
                } else {
                }
            } else if (currentState == CURRENT_STATE_PLAYING) {
                if (bottomContainer.getVisibility() == View.VISIBLE) {
                    changeUiToPlayingClear();
                } else {
                }
            } else if (currentState == CURRENT_STATE_PAUSE) {
                if (bottomContainer.getVisibility() == View.VISIBLE) {
                    changeUiToPauseClear();
                } else {
                }
            } else if (currentState == CURRENT_STATE_AUTO_COMPLETE) {
                if (bottomContainer.getVisibility() == View.VISIBLE) {
                    changeUiToComplete();
                } else {
                }
            }
        }
    
        @Override
        public void onProgress(int progress, long position, long duration) {
            super.onProgress(progress, position, duration);
            if (progress != 0) bottomProgressBar.setProgress(progress);
        }
    
        @Override
        public void setBufferProgress(int bufferProgress) {
            super.setBufferProgress(bufferProgress);
            if (bufferProgress != 0) bottomProgressBar.setSecondaryProgress(bufferProgress);
        }
    
        @Override
        public void resetProgressAndTime() {
            super.resetProgressAndTime();
            bottomProgressBar.setProgress(0);
            bottomProgressBar.setSecondaryProgress(0);
        }
    
        public void changeUiToNormal() {
            switch (currentScreen) {
                case SCREEN_WINDOW_NORMAL:
                case SCREEN_WINDOW_LIST:
                    setAllControlsVisiblity(View.VISIBLE, View.INVISIBLE, View.VISIBLE,
                            View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE);
                    updateStartImage();
                    break;
                case SCREEN_WINDOW_FULLSCREEN:
                    setAllControlsVisiblity(View.VISIBLE, View.INVISIBLE, View.VISIBLE,
                            View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE);
                    updateStartImage();
                    break;
                case SCREEN_WINDOW_TINY:
                    break;
            }
        }
    
        public void changeUiToPreparing() {
            switch (currentScreen) {
                case SCREEN_WINDOW_NORMAL:
                case SCREEN_WINDOW_LIST:
                case SCREEN_WINDOW_FULLSCREEN:
                    setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE,
                            View.VISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE);
                    updateStartImage();
                    break;
                case SCREEN_WINDOW_TINY:
                    break;
            }
    
        }
    
        public void changeUiToPlayingShow() {
            switch (currentScreen) {
                case SCREEN_WINDOW_NORMAL:
                case SCREEN_WINDOW_LIST:
                    setAllControlsVisiblity(View.VISIBLE, View.VISIBLE, View.VISIBLE,
                            View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE);
                    updateStartImage();
                    break;
                case SCREEN_WINDOW_FULLSCREEN:
                    setAllControlsVisiblity(View.VISIBLE, View.VISIBLE, View.VISIBLE,
                            View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE);
                    updateStartImage();
                    break;
                case SCREEN_WINDOW_TINY:
                    break;
            }
    
        }
    
        public void changeUiToPlayingClear() {
            switch (currentScreen) {
                case SCREEN_WINDOW_NORMAL:
                case SCREEN_WINDOW_LIST:
                    setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE,
                            View.INVISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE);
                    break;
                case SCREEN_WINDOW_FULLSCREEN:
                    setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE,
                            View.INVISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE);
                    break;
                case SCREEN_WINDOW_TINY:
                    break;
            }
    
        }
    
        public void changeUiToPauseShow() {
            switch (currentScreen) {
                case SCREEN_WINDOW_NORMAL:
                case SCREEN_WINDOW_LIST:
                    setAllControlsVisiblity(View.VISIBLE, View.VISIBLE, View.VISIBLE,
                            View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE);
                    updateStartImage();
                    break;
                case SCREEN_WINDOW_FULLSCREEN:
                    setAllControlsVisiblity(View.VISIBLE, View.VISIBLE, View.VISIBLE,
                            View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE);
                    updateStartImage();
                    break;
                case SCREEN_WINDOW_TINY:
                    break;
            }
        }
    
        public void changeUiToPauseClear() {
            switch (currentScreen) {
                case SCREEN_WINDOW_NORMAL:
                case SCREEN_WINDOW_LIST:
                    setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE,
                            View.INVISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE);
                    break;
                case SCREEN_WINDOW_FULLSCREEN:
                    setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE,
                            View.INVISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE);
                    break;
                case SCREEN_WINDOW_TINY:
                    break;
            }
    
        }
    
        public void changeUiToComplete() {
            switch (currentScreen) {
                case SCREEN_WINDOW_NORMAL:
                case SCREEN_WINDOW_LIST:
                    setAllControlsVisiblity(View.VISIBLE, View.INVISIBLE, View.VISIBLE,
                            View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE);
                    updateStartImage();
                    break;
                case SCREEN_WINDOW_FULLSCREEN:
                    setAllControlsVisiblity(View.VISIBLE, View.INVISIBLE, View.VISIBLE,
                            View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE);
                    updateStartImage();
                    break;
                case SCREEN_WINDOW_TINY:
                    break;
            }
    
        }
    
        public void changeUiToError() {
            switch (currentScreen) {
                case SCREEN_WINDOW_NORMAL:
                case SCREEN_WINDOW_LIST:
                    setAllControlsVisiblity(View.INVISIBLE, View.INVISIBLE, View.VISIBLE,
                            View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE);
                    updateStartImage();
                    break;
                case SCREEN_WINDOW_FULLSCREEN:
                    setAllControlsVisiblity(View.VISIBLE, View.INVISIBLE, View.VISIBLE,
                            View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE);
                    updateStartImage();
                    break;
                case SCREEN_WINDOW_TINY:
                    break;
            }
    
        }
    
        public void setAllControlsVisiblity(int topCon, int bottomCon, int startBtn, int loadingPro,
                                            int thumbImg, int bottomPro, int retryLayout) {
            topContainer.setVisibility(topCon);
            bottomContainer.setVisibility(bottomCon);
            startButton.setVisibility(startBtn);
            loadingProgressBar.setVisibility(loadingPro);
            thumbImageView.setVisibility(thumbImg);
            bottomProgressBar.setVisibility(bottomPro);
            tipLayout.setVisibility(retryLayout);
            mRetryLayout.setVisibility(retryLayout);
        }
    
        public void updateStartImage() {
            if (currentState == CURRENT_STATE_PLAYING) {
                startButton.setVisibility(VISIBLE);
                startButton.setImageResource(cn.jzvd.R.drawable.jz_click_pause_selector);
                replayTextView.setVisibility(GONE);
            } else if (currentState == CURRENT_STATE_ERROR) {
                startButton.setVisibility(INVISIBLE);
                replayTextView.setVisibility(GONE);
            } else if (currentState == CURRENT_STATE_AUTO_COMPLETE) {
                startButton.setVisibility(VISIBLE);
                startButton.setImageResource(cn.jzvd.R.drawable.jz_click_replay_selector);
                replayTextView.setVisibility(VISIBLE);
            } else {
                startButton.setImageResource(cn.jzvd.R.drawable.jz_click_play_selector);
                replayTextView.setVisibility(GONE);
            }
        }
    
        @Override
        public void showProgressDialog(float deltaX, String seekTime, long seekTimePosition, String totalTime, long totalTimeDuration) {
            super.showProgressDialog(deltaX, seekTime, seekTimePosition, totalTime, totalTimeDuration);
            if (mProgressDialog == null) {
                View localView = LayoutInflater.from(getContext()).inflate(cn.jzvd.R.layout.jz_dialog_progress, null);
                mDialogProgressBar = localView.findViewById(cn.jzvd.R.id.duration_progressbar);
                mDialogSeekTime = localView.findViewById(cn.jzvd.R.id.tv_current);
                mDialogTotalTime = localView.findViewById(cn.jzvd.R.id.tv_duration);
                mDialogIcon = localView.findViewById(cn.jzvd.R.id.duration_image_tip);
                mProgressDialog = createDialogWithView(localView);
            }
            if (!mProgressDialog.isShowing()) {
                mProgressDialog.show();
            }
    
            mDialogSeekTime.setText(seekTime);
            mDialogTotalTime.setText(" / " + totalTime);
            mDialogProgressBar.setProgress(totalTimeDuration <= 0 ? 0 : (int) (seekTimePosition * 100 / totalTimeDuration));
            if (deltaX > 0) {
                mDialogIcon.setBackgroundResource(cn.jzvd.R.drawable.jz_forward_icon);
            } else {
                mDialogIcon.setBackgroundResource(cn.jzvd.R.drawable.jz_backward_icon);
            }
            onCLickUiToggleToClear();
        }
    
        @Override
        public void dismissProgressDialog() {
            super.dismissProgressDialog();
            if (mProgressDialog != null) {
                mProgressDialog.dismiss();
            }
        }
    
        @Override
        public void showVolumeDialog(float deltaY, int volumePercent) {
            super.showVolumeDialog(deltaY, volumePercent);
            if (mVolumeDialog == null) {
                View localView = LayoutInflater.from(getContext()).inflate(cn.jzvd.R.layout.jz_dialog_volume, null);
                mDialogVolumeImageView = localView.findViewById(cn.jzvd.R.id.volume_image_tip);
                mDialogVolumeTextView = localView.findViewById(cn.jzvd.R.id.tv_volume);
                mDialogVolumeProgressBar = localView.findViewById(cn.jzvd.R.id.volume_progressbar);
                mVolumeDialog = createDialogWithView(localView);
            }
            if (!mVolumeDialog.isShowing()) {
                mVolumeDialog.show();
            }
            if (volumePercent <= 0) {
                mDialogVolumeImageView.setBackgroundResource(cn.jzvd.R.drawable.jz_close_volume);
            } else {
                mDialogVolumeImageView.setBackgroundResource(cn.jzvd.R.drawable.jz_add_volume);
            }
            if (volumePercent > 100) {
                volumePercent = 100;
            } else if (volumePercent < 0) {
                volumePercent = 0;
            }
            mDialogVolumeTextView.setText(volumePercent + "%");
            mDialogVolumeProgressBar.setProgress(volumePercent);
            onCLickUiToggleToClear();
        }
    
        @Override
        public void dismissVolumeDialog() {
            super.dismissVolumeDialog();
            if (mVolumeDialog != null) {
                mVolumeDialog.dismiss();
            }
        }
    
        @Override
        public void showBrightnessDialog(int brightnessPercent) {
            super.showBrightnessDialog(brightnessPercent);
            if (mBrightnessDialog == null) {
                View localView = LayoutInflater.from(getContext()).inflate(cn.jzvd.R.layout.jz_dialog_brightness, null);
                mDialogBrightnessTextView = localView.findViewById(cn.jzvd.R.id.tv_brightness);
                mDialogBrightnessProgressBar = localView.findViewById(cn.jzvd.R.id.brightness_progressbar);
                mBrightnessDialog = createDialogWithView(localView);
            }
            if (!mBrightnessDialog.isShowing()) {
                mBrightnessDialog.show();
            }
            if (brightnessPercent > 100) {
                brightnessPercent = 100;
            } else if (brightnessPercent < 0) {
                brightnessPercent = 0;
            }
            mDialogBrightnessTextView.setText(brightnessPercent + "%");
            mDialogBrightnessProgressBar.setProgress(brightnessPercent);
            onCLickUiToggleToClear();
        }
    
        @Override
        public void dismissBrightnessDialog() {
            super.dismissBrightnessDialog();
            if (mBrightnessDialog != null) {
                mBrightnessDialog.dismiss();
            }
        }
    
        public Dialog createDialogWithView(View localView) {
            Dialog dialog = new Dialog(getContext(), cn.jzvd.R.style.jz_style_dialog_progress);
            dialog.setContentView(localView);
            Window window = dialog.getWindow();
            window.addFlags(Window.FEATURE_ACTION_BAR);
            window.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
            window.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
            window.setLayout(-2, -2);
            WindowManager.LayoutParams localLayoutParams = window.getAttributes();
            localLayoutParams.gravity = Gravity.CENTER;
            window.setAttributes(localLayoutParams);
            return dialog;
        }
    
        public void startDismissControlViewTimer() {
            cancelDismissControlViewTimer();
            DISMISS_CONTROL_VIEW_TIMER = new Timer();
            mDismissControlViewTimerTask = new DismissControlViewTimerTask();
            DISMISS_CONTROL_VIEW_TIMER.schedule(mDismissControlViewTimerTask, 2500);
        }
    
        public void cancelDismissControlViewTimer() {
            if (DISMISS_CONTROL_VIEW_TIMER != null) {
                DISMISS_CONTROL_VIEW_TIMER.cancel();
            }
            if (mDismissControlViewTimerTask != null) {
                mDismissControlViewTimerTask.cancel();
            }
    
        }
    
        @Override
        public void onAutoCompletion() {
            super.onAutoCompletion();
            cancelDismissControlViewTimer();
        }
    
        @Override
        public void onCompletion() {
            super.onCompletion();
            cancelDismissControlViewTimer();
            if (clarityPopWindow != null) {
                clarityPopWindow.dismiss();
            }
        }
    
        public void dissmissControlView() {
            if (currentState != CURRENT_STATE_NORMAL
                    && currentState != CURRENT_STATE_ERROR
                    && currentState != CURRENT_STATE_AUTO_COMPLETE) {
                post(() -> {
                    bottomContainer.setVisibility(View.INVISIBLE);
                    topContainer.setVisibility(View.INVISIBLE);
                    startButton.setVisibility(View.INVISIBLE);
                    if (clarityPopWindow != null) {
                        clarityPopWindow.dismiss();
                    }
                    if (currentScreen != SCREEN_WINDOW_TINY) {
                        bottomProgressBar.setVisibility(View.VISIBLE);
                    }
                });
            }
        }
    
        public class DismissControlViewTimerTask extends TimerTask {
    
            @Override
            public void run() {
                dissmissControlView();
            }
        }
    }
    

    一些小屏播放无声音全屏播放有声音,全屏状态播放完成,不退出全屏,可以参考
    JiaoZiVideoPlayer使用说明(持续更新中...)
    其中将父类JzvdStd更换为当前类即可实现。

    相关文章

      网友评论

        本文标题:仿今日头条播放——依赖饺子播放器

        本文链接:https://www.haomeiwen.com/subject/ufjlkqtx.html