提交 f7910cf3 编写于 作者: S shuyu

* 优化了弹幕的显示逻辑

上级 1becbed5
......@@ -63,6 +63,10 @@
android:name=".RecyclerViewActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
<activity
android:name=".DanmkuVideoActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait" />
</application>
</manifest>
\ No newline at end of file
package com.example.gsyvideoplayer;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.widget.NestedScrollView;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.example.gsyvideoplayer.listener.SampleListener;
import com.example.gsyvideoplayer.video.DanmakuVideoPlayer;
import com.shuyu.gsyvideoplayer.GSYPreViewManager;
import com.shuyu.gsyvideoplayer.GSYVideoPlayer;
import com.shuyu.gsyvideoplayer.listener.LockClickListener;
import com.shuyu.gsyvideoplayer.utils.OrientationUtils;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by guoshuyu on 2017/2/19.
* 弹幕
*/
public class DanmkuVideoActivity extends AppCompatActivity {
@BindView(R.id.post_detail_nested_scroll)
NestedScrollView postDetailNestedScroll;
@BindView(R.id.danmaku_player)
DanmakuVideoPlayer danmakuVideoPlayer;
@BindView(R.id.activity_detail_player)
RelativeLayout activityDetailPlayer;
private boolean isPlay;
private boolean isPause;
private OrientationUtils orientationUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_danmaku_layout);
ButterKnife.bind(this);
String url = "http://baobab.wdjcdn.com/14564977406580.mp4";
//String url = "https://res.exexm.com/cw_145225549855002";
danmakuVideoPlayer.setUp(url, true, null, "测试视频");
//增加封面
ImageView imageView = new ImageView(this);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setImageResource(R.mipmap.xxx1);
danmakuVideoPlayer.setThumbImageView(imageView);
resolveNormalVideoUI();
//外部辅助的旋转,帮助全屏
orientationUtils = new OrientationUtils(this, danmakuVideoPlayer);
//初始化不打开外部的旋转
orientationUtils.setEnable(false);
danmakuVideoPlayer.setIsTouchWiget(true);
//关闭自动旋转
danmakuVideoPlayer.setRotateViewAuto(false);
danmakuVideoPlayer.setLockLand(false);
danmakuVideoPlayer.setShowFullAnimation(false);
danmakuVideoPlayer.setNeedLockFull(true);
//detailPlayer.setOpenPreView(true);
danmakuVideoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//直接横屏
orientationUtils.resolveByClick();
//第一个true是否需要隐藏actionbar,第二个true是否需要隐藏statusbar
danmakuVideoPlayer.startWindowFullscreen(DanmkuVideoActivity.this, true, true);
}
});
danmakuVideoPlayer.setStandardVideoAllCallBack(new SampleListener() {
@Override
public void onPrepared(String url, Object... objects) {
super.onPrepared(url, objects);
//开始播放了才能旋转和全屏
orientationUtils.setEnable(true);
isPlay = true;
}
@Override
public void onAutoComplete(String url, Object... objects) {
super.onAutoComplete(url, objects);
}
@Override
public void onClickStartError(String url, Object... objects) {
super.onClickStartError(url, objects);
}
@Override
public void onQuitFullscreen(String url, Object... objects) {
super.onQuitFullscreen(url, objects);
if (orientationUtils != null) {
orientationUtils.backToProtVideo();
}
}
});
danmakuVideoPlayer.setLockClickListener(new LockClickListener() {
@Override
public void onClick(View view, boolean lock) {
if (orientationUtils != null) {
//配合下方的onConfigurationChanged
orientationUtils.setEnable(!lock);
}
}
});
}
@Override
public void onBackPressed() {
if (orientationUtils != null) {
orientationUtils.backToProtVideo();
}
if (StandardGSYVideoPlayer.backFromWindowFull(this)) {
return;
}
super.onBackPressed();
}
@Override
protected void onPause() {
super.onPause();
isPause = true;
}
@Override
protected void onResume() {
super.onResume();
isPause = false;
}
@Override
protected void onDestroy() {
super.onDestroy();
GSYVideoPlayer.releaseAllVideos();
GSYPreViewManager.instance().releaseMediaPlayer();
if (orientationUtils != null)
orientationUtils.releaseListener();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
//如果旋转了就全屏
if (isPlay && !isPause) {
if (newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_USER) {
if (!danmakuVideoPlayer.isIfCurrentIsFullscreen()) {
danmakuVideoPlayer.startWindowFullscreen(DanmkuVideoActivity.this, true, true);
}
} else {
//新版本isIfCurrentIsFullscreen的标志位内部提前设置了,所以不会和手动点击冲突
if (danmakuVideoPlayer.isIfCurrentIsFullscreen()) {
StandardGSYVideoPlayer.backFromWindowFull(this);
}
if (orientationUtils != null) {
orientationUtils.setEnable(true);
}
}
}
}
private void resolveNormalVideoUI() {
//增加title
danmakuVideoPlayer.getTitleTextView().setVisibility(View.GONE);
danmakuVideoPlayer.getTitleTextView().setText("测试视频");
danmakuVideoPlayer.getBackButton().setVisibility(View.GONE);
}
}
\ No newline at end of file
......@@ -10,7 +10,6 @@ import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.example.gsyvideoplayer.listener.SampleListener;
import com.example.gsyvideoplayer.video.DanmakuVideoPlayer;
import com.example.gsyvideoplayer.video.LandLayoutVideo;
import com.shuyu.gsyvideoplayer.GSYPreViewManager;
import com.shuyu.gsyvideoplayer.GSYVideoPlayer;
......@@ -33,7 +32,7 @@ public class DetailPlayer extends AppCompatActivity {
//推荐使用StandardGSYVideoPlayer,功能一致
//CustomGSYVideoPlayer部分功能处于试验阶段
@BindView(R.id.detail_player)
DanmakuVideoPlayer detailPlayer;
LandLayoutVideo detailPlayer;
@BindView(R.id.activity_detail_player)
RelativeLayout activityDetailPlayer;
......@@ -72,7 +71,7 @@ public class DetailPlayer extends AppCompatActivity {
detailPlayer.setLockLand(false);
detailPlayer.setShowFullAnimation(false);
detailPlayer.setNeedLockFull(true);
//detailPlayer.setOpenPreView(true);
detailPlayer.setOpenPreView(true);
detailPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
......
......@@ -27,7 +27,7 @@ public class MainActivity extends AppCompatActivity {
ButterKnife.bind(this);
}
@OnClick({R.id.open_btn, R.id.list_btn, R.id.list_btn_2, R.id.list_detail, R.id.clear_cache, R.id.recycler, R.id.recycler_2, R.id.list_detail_list, R.id.web_detail})
@OnClick({R.id.open_btn, R.id.list_btn, R.id.list_btn_2, R.id.list_detail, R.id.clear_cache, R.id.recycler, R.id.recycler_2, R.id.list_detail_list, R.id.web_detail, R.id.danmaku_video})
public void onClick(View view) {
switch (view.getId()) {
case R.id.open_btn:
......@@ -62,6 +62,9 @@ public class MainActivity extends AppCompatActivity {
//播放一个连续列表
JumpUtils.gotoWebDetail(this);
break;
case R.id.danmaku_video:
//播放一个弹幕视频
JumpUtils.gotoDanmaku(this);
case R.id.clear_cache:
//清理缓存
GSYVideoManager.clearAllDefaultCache(MainActivity.this);
......
......@@ -7,6 +7,7 @@ import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.util.Pair;
import android.view.View;
import com.example.gsyvideoplayer.DanmkuVideoActivity;
import com.example.gsyvideoplayer.DetailListPlayer;
import com.example.gsyvideoplayer.DetailPlayer;
import com.example.gsyvideoplayer.ListVideo2Activity;
......@@ -118,4 +119,14 @@ public class JumpUtils {
Intent intent = new Intent(activity, WebDetailActivity.class);
activity.startActivity(intent);
}
/**
* 跳转到弹幕
*
* @param activity
*/
public static void gotoDanmaku(Activity activity) {
Intent intent = new Intent(activity, DanmkuVideoActivity.class);
activity.startActivity(intent);
}
}
......@@ -14,6 +14,7 @@ import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SeekBar;
import android.widget.TextView;
import com.example.gsyvideoplayer.R;
import com.example.gsyvideoplayer.adapter.DanamakuAdapter;
......@@ -49,10 +50,13 @@ import master.flame.danmaku.ui.widget.DanmakuView;
/**
* Created by guoshuyu on 2017/2/16.
*
* <p>
* 配置弹幕使用的播放器,目前使用的是本地模拟数据。
*
* 模拟数据的弹幕时常比较短,后面的时常点是没有数据的。
* <p>
* 模拟数据的弹幕时常比较短,后面的时长点是没有数据的。
* <p>
* 注意:这只是一个例子,演示如何集合弹幕,需要完善如弹出输入弹幕等的,可以自行完善。
* 注意:b站的弹幕so只有v5 v7 x86、没有64,所以记得配置上ndk过滤。
*/
public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
......@@ -61,8 +65,12 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
private IDanmakuView mDanmakuView;//弹幕view
private DanmakuContext mDanmakuContext;
private TextView mSendDanmaku, mToogleDanmaku;
private long mDanmakuStartSeekPosition = -1;
private boolean mDanmaKuShow = true;
public DanmakuVideoPlayer(Context context, Boolean fullFlag) {
super(context, fullFlag);
}
......@@ -85,52 +93,16 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
protected void init(Context context) {
super.init(context);
mDanmakuView = (DanmakuView) findViewById(R.id.danmaku_view);
mSendDanmaku = (TextView) findViewById(R.id.send_danmaku);
mToogleDanmaku = (TextView) findViewById(R.id.toogle_danmaku);
// 设置最大显示行数
HashMap<Integer, Integer> maxLinesPair = new HashMap<Integer, Integer>();
maxLinesPair.put(BaseDanmaku.TYPE_SCROLL_RL, 5); // 滚动弹幕最大显示5行
// 设置是否禁止重叠
HashMap<Integer, Boolean> overlappingEnablePair = new HashMap<Integer, Boolean>();
overlappingEnablePair.put(BaseDanmaku.TYPE_SCROLL_RL, true);
overlappingEnablePair.put(BaseDanmaku.TYPE_FIX_TOP, true);
DanamakuAdapter danamakuAdapter = new DanamakuAdapter(mDanmakuView);
mDanmakuContext = DanmakuContext.create();
mDanmakuContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3).setDuplicateMergingEnabled(false).setScrollSpeedFactor(1.2f).setScaleTextSize(1.2f)
.setCacheStuffer(new SpannedCacheStuffer(), danamakuAdapter) // 图文混排使用SpannedCacheStuffer
// .setCacheStuffer(new BackgroundCacheStuffer()) // 绘制背景使用BackgroundCacheStuffer
.setMaximumLines(maxLinesPair)
.preventOverlapping(overlappingEnablePair);
if (mDanmakuView != null) {
//todo 替换成你的数据流
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() {
//初始化弹幕显示
initDanmaku();
}
mSendDanmaku.setOnClickListener(this);
mToogleDanmaku.setOnClickListener(this);
@Override
public void danmakuShown(BaseDanmaku danmaku) {
}
@Override
public void prepared() {
if (getDanmakuView() != null) {
getDanmakuView().start();
if (getDanmakuStartSeekPosition() != -1) {
resolveDanmakuSeek(DanmakuVideoPlayer.this, getDanmakuStartSeekPosition());
setDanmakuStartSeekPosition(-1);
}
}
}
});
mDanmakuView.enableDanmakuDrawingCache(true);
}
}
@Override
......@@ -158,9 +130,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
@Override
public void release() {
super.release();
if (mDanmakuView != null) {
mDanmakuView.release();
}
releaseDanmaku(this);
}
......@@ -177,8 +147,23 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
}
@Override
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.send_danmaku:
addDanmaku(true);
break;
case R.id.toogle_danmaku:
mDanmaKuShow = !mDanmaKuShow;
resolveDanmakuShow();
break;
}
}
/**
* 处理播放器在全屏切换时,弹幕显示的逻辑
* 需要格外注意的是,因为全屏和小屏,是切换了播放器,所以需要同步之间的弹幕状态
*/
@Override
public GSYBaseVideoPlayer startWindowFullscreen(Context context, boolean actionBar, boolean statusBar) {
......@@ -187,6 +172,7 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
DanmakuVideoPlayer gsyVideoPlayer = (DanmakuVideoPlayer) gsyBaseVideoPlayer;
//对弹幕设置偏移记录
gsyVideoPlayer.setDanmakuStartSeekPosition(getCurrentPositionWhenPlaying());
gsyVideoPlayer.setDanmaKuShow(getDanmaKuShow());
onPrepareDanmaku(gsyVideoPlayer);
}
return gsyBaseVideoPlayer;
......@@ -194,19 +180,93 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
/**
* 处理播放器在退出全屏时,弹幕显示的逻辑
* 需要格外注意的是,因为全屏和小屏,是切换了播放器,所以需要同步之间的弹幕状态
*/
@Override
protected void resolveNormalVideoShow(View oldF, ViewGroup vp, GSYVideoPlayer gsyVideoPlayer) {
super.resolveNormalVideoShow(oldF, vp, gsyVideoPlayer);
if (gsyVideoPlayer != null) {
DanmakuVideoPlayer gsyDanmaVideoPlayer = (DanmakuVideoPlayer) gsyVideoPlayer;
setDanmaKuShow(gsyDanmaVideoPlayer.getDanmaKuShow());
if (gsyDanmaVideoPlayer.getDanmakuView() != null &&
gsyDanmaVideoPlayer.getDanmakuView().isPrepared()) {
resolveDanmakuSeek(this, gsyDanmaVideoPlayer.getCurrentPositionWhenPlaying());
resolveDanmakuShow();
releaseDanmaku(gsyDanmaVideoPlayer);
}
}
}
private void initDanmaku() {
// 设置最大显示行数
HashMap<Integer, Integer> maxLinesPair = new HashMap<Integer, Integer>();
maxLinesPair.put(BaseDanmaku.TYPE_SCROLL_RL, 5); // 滚动弹幕最大显示5行
// 设置是否禁止重叠
HashMap<Integer, Boolean> overlappingEnablePair = new HashMap<Integer, Boolean>();
overlappingEnablePair.put(BaseDanmaku.TYPE_SCROLL_RL, true);
overlappingEnablePair.put(BaseDanmaku.TYPE_FIX_TOP, true);
DanamakuAdapter danamakuAdapter = new DanamakuAdapter(mDanmakuView);
mDanmakuContext = DanmakuContext.create();
mDanmakuContext.setDanmakuStyle(IDisplayer.DANMAKU_STYLE_STROKEN, 3).setDuplicateMergingEnabled(false).setScrollSpeedFactor(1.2f).setScaleTextSize(1.2f)
.setCacheStuffer(new SpannedCacheStuffer(), danamakuAdapter) // 图文混排使用SpannedCacheStuffer
.setMaximumLines(maxLinesPair)
.preventOverlapping(overlappingEnablePair);
if (mDanmakuView != null) {
//todo 替换成你的数据流
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) {
}
@Override
public void prepared() {
if (getDanmakuView() != null) {
getDanmakuView().start();
if (getDanmakuStartSeekPosition() != -1) {
resolveDanmakuSeek(DanmakuVideoPlayer.this, getDanmakuStartSeekPosition());
setDanmakuStartSeekPosition(-1);
}
resolveDanmakuShow();
}
}
});
mDanmakuView.enableDanmakuDrawingCache(true);
}
}
/**
* 弹幕的显示与关闭
*/
private void resolveDanmakuShow() {
post(new Runnable() {
@Override
public void run() {
if (mDanmaKuShow) {
if (!getDanmakuView().isShown())
getDanmakuView().show();
mToogleDanmaku.setText("弹幕关");
} else {
if (getDanmakuView().isShown()) {
getDanmakuView().hide();
}
mToogleDanmaku.setText("弹幕开");
}
}
});
}
/**
* 开始播放弹幕
*/
......@@ -259,6 +319,15 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
}
/**
* 释放弹幕控件
*/
private void releaseDanmaku(DanmakuVideoPlayer danmakuVideoPlayer) {
if (danmakuVideoPlayer != null && danmakuVideoPlayer.getDanmakuView() != null) {
danmakuVideoPlayer.getDanmakuView().release();
}
}
public BaseDanmakuParser getParser() {
return mParser;
}
......@@ -278,4 +347,34 @@ public class DanmakuVideoPlayer extends StandardGSYVideoPlayer {
public void setDanmakuStartSeekPosition(long danmakuStartSeekPosition) {
this.mDanmakuStartSeekPosition = danmakuStartSeekPosition;
}
public void setDanmaKuShow(boolean danmaKuShow) {
mDanmaKuShow = danmaKuShow;
}
public boolean getDanmaKuShow() {
return mDanmaKuShow;
}
/**
* 模拟添加弹幕数据
*/
private void addDanmaku(boolean islive) {
BaseDanmaku danmaku = mDanmakuContext.mDanmakuFactory.createDanmaku(BaseDanmaku.TYPE_SCROLL_RL);
if (danmaku == null || mDanmakuView == null) {
return;
}
danmaku.text = "这是一条弹幕 " + getCurrentPositionWhenPlaying();
danmaku.padding = 5;
danmaku.priority = 8; // 可能会被各种过滤器过滤并隐藏显示,所以提高等级
danmaku.isLive = islive;
danmaku.setTime(mDanmakuView.getCurrentTime() + 500);
danmaku.textSize = 25f * (mParser.getDisplayer().getDensity() - 0.6f);
danmaku.textColor = Color.RED;
danmaku.textShadowColor = Color.WHITE;
danmaku.borderColor = Color.GREEN;
mDanmakuView.addDanmaku(danmaku);
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_detail_player"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.NestedScrollView
android:id="@+id/post_detail_nested_scroll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="@dimen/post_media_height" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/detail_text"
android:textSize="16sp" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<com.example.gsyvideoplayer.video.DanmakuVideoPlayer
android:id="@+id/danmaku_player"
android:layout_width="match_parent"
android:layout_height="@dimen/post_media_height" />
</RelativeLayout>
......@@ -29,7 +29,7 @@
</android.support.v4.widget.NestedScrollView>
<com.example.gsyvideoplayer.video.DanmakuVideoPlayer
<com.example.gsyvideoplayer.video.LandLayoutVideo
android:id="@+id/detail_player"
android:layout_width="match_parent"
android:layout_height="@dimen/post_media_height" />
......
......@@ -54,7 +54,7 @@
android:layout_width="120dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Detail Video2" />
android:text="Detail Video" />
<Button
android:id="@+id/list_detail_list"
......@@ -71,6 +71,14 @@
android:layout_marginTop="20dp"
android:text="web detail" />
<Button
android:id="@+id/danmaku_video"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="Danmaku Video" />
<Button
android:id="@+id/clear_cache"
android:layout_width="120dp"
......
......@@ -41,51 +41,86 @@
<LinearLayout
android:id="@+id/layout_bottom"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#99000000"
android:gravity="center_vertical"
android:orientation="horizontal"
android:orientation="vertical"
android:visibility="invisible">
<TextView
android:id="@+id/current"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:text="00:00"
android:textColor="#ffffff" />
<SeekBar
android:id="@+id/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="4dp"
android:minHeight="4dp"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:progressDrawable="@drawable/video_seek_progress"
android:thumb="@drawable/video_seek_thumb" />
<TextView
android:id="@+id/total"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="16dp"
android:text="00:00"
android:textColor="#ffffff" />
<ImageView
android:id="@+id/fullscreen"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:paddingRight="16dp"
android:scaleType="center"
android:src="@drawable/video_enlarge" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/current"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:text="00:00"
android:textColor="#ffffff" />
<SeekBar
android:id="@+id/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="4dp"
android:minHeight="4dp"
android:paddingBottom="8dp"
android:paddingTop="8dp"
android:progressDrawable="@drawable/video_seek_progress"
android:thumb="@drawable/video_seek_thumb" />
<TextView
android:id="@+id/total"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="16dp"
android:text="00:00"
android:textColor="#ffffff" />
<ImageView
android:id="@+id/fullscreen"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingRight="10dp"
android:scaleType="center"
android:src="@drawable/video_enlarge" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/send_danmaku"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="#808080"
android:gravity="center"
android:text="发送弹幕"
android:textColor="#ffffff" />
<TextView
android:id="@+id/toogle_danmaku"
android:layout_width="50dp"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:gravity="center"
android:text="弹幕关"
android:textColor="#ffffff" />
</LinearLayout>
</LinearLayout>
<ProgressBar
......@@ -163,7 +198,7 @@
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="50dp"
android:visibility="gone"
android:scaleType="centerInside"
android:src="@drawable/unlock" />
android:src="@drawable/unlock"
android:visibility="gone" />
</RelativeLayout>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册