From c01e0133cdef036d694c1dc0c97a86106dee415e Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 26 Aug 2023 15:59:16 +0800 Subject: [PATCH] [leanback] add subtitle size setting --- .../tv/ui/activity/DetailActivity.java | 29 ++++++--- .../android/tv/ui/activity/LiveActivity.java | 25 ++++++-- .../tv/ui/activity/SettingPlayerActivity.java | 15 ++++- .../tv/ui/custom/dialog/SubtitleDialog.java | 62 +++++++++++++++++++ .../res/layout/activity_setting_player.xml | 29 +++++++++ .../leanback/res/layout/dialog_subtitle.xml | 59 ++++++++++++++++++ .../java/com/fongmi/android/tv/Setting.java | 8 +++ .../android/tv/impl/SubtitleCallback.java | 6 ++ app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + ijkplayer/build.gradle | 2 + .../ijk/media/player/ui/IjkVideoView.java | 9 +-- .../ijk/media/player/ui/SubtitleView.java | 62 ------------------- .../tv/danmaku/ijk/media/player/ui/Util.java | 9 ++- .../src/main/res/layout/ijk_player_view.xml | 15 ++--- 16 files changed, 243 insertions(+), 90 deletions(-) create mode 100644 app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SubtitleDialog.java create mode 100644 app/src/leanback/res/layout/dialog_subtitle.xml create mode 100644 app/src/main/java/com/fongmi/android/tv/impl/SubtitleCallback.java delete mode 100644 ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/SubtitleView.java diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index c9b7bb4d2..7c0bf1275 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -8,13 +8,13 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.text.Html; import android.text.TextUtils; -import android.util.TypedValue; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.annotation.Dimension; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.FragmentActivity; @@ -51,6 +51,7 @@ import com.fongmi.android.tv.event.PlayerEvent; import com.fongmi.android.tv.event.RefreshEvent; import com.fongmi.android.tv.impl.Callback; import com.fongmi.android.tv.impl.CustomTarget; +import com.fongmi.android.tv.impl.SubtitleCallback; import com.fongmi.android.tv.model.SiteViewModel; import com.fongmi.android.tv.player.ExoUtil; import com.fongmi.android.tv.player.Players; @@ -59,6 +60,7 @@ import com.fongmi.android.tv.ui.adapter.QualityAdapter; import com.fongmi.android.tv.ui.base.BaseActivity; import com.fongmi.android.tv.ui.custom.CustomKeyDownVod; import com.fongmi.android.tv.ui.custom.dialog.DescDialog; +import com.fongmi.android.tv.ui.custom.dialog.SubtitleDialog; import com.fongmi.android.tv.ui.custom.dialog.TrackDialog; import com.fongmi.android.tv.ui.presenter.ArrayPresenter; import com.fongmi.android.tv.ui.presenter.EpisodePresenter; @@ -94,7 +96,7 @@ import okhttp3.Call; import okhttp3.Response; import tv.danmaku.ijk.media.player.ui.IjkVideoView; -public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackDialog.Listener, ArrayPresenter.OnClickListener, Clock.Callback { +public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackDialog.Listener, ArrayPresenter.OnClickListener, Clock.Callback, SubtitleCallback { private ViewGroup.LayoutParams mFrameParams; private EpisodePresenter mEpisodePresenter; @@ -296,6 +298,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mBinding.control.ending.setOnClickListener(view -> onEnding()); mBinding.control.change2.setOnClickListener(view -> onChange()); mBinding.control.opening.setOnClickListener(view -> onOpening()); + mBinding.control.text.setOnLongClickListener(view -> onTextLong()); mBinding.control.speed.setOnLongClickListener(view -> onSpeedLong()); mBinding.control.reset.setOnLongClickListener(view -> onResetToggle()); mBinding.control.ending.setOnLongClickListener(view -> onEndingReset()); @@ -353,10 +356,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } private void setVideoView() { - mPlayers.set(getExo(), getIjk()); - getExo().getSubtitleView().setUserDefaultTextSize(); getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle()); - getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); + getIjk().getSubtitleView().setStyle(ExoUtil.getCaptionStyle()); + mPlayers.set(getExo(), getIjk()); + setSubtitle(16); } private void setScale(int scale) { @@ -567,9 +570,9 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private void enterFullscreen() { mBinding.video.setForeground(null); - getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 24); mBinding.video.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT)); mBinding.flag.setSelectedPosition(getCurrentFlag()); + setSubtitle(Setting.getSubtitle()); mKeyDown.setFull(true); setFullscreen(true); onPlay(); @@ -577,10 +580,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private void exitFullscreen() { mBinding.video.setForeground(ResUtil.getDrawable(R.drawable.selector_video)); - getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); mBinding.video.setLayoutParams(mFrameParams); mKeyDown.setFull(false); setFullscreen(false); + setSubtitle(16); hideInfo(); } @@ -754,6 +757,12 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis hideControl(); } + private boolean onTextLong() { + SubtitleDialog.create(this).show(); + hideControl(); + return true; + } + private void onToggle() { if (isVisible(mBinding.control.getRoot())) hideControl(); else showControl(mBinding.control.next); @@ -1305,6 +1314,12 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis if (isFullscreen()) onKeyCenter(); } + @Override + public void setSubtitle(int size) { + getExo().getSubtitleView().setFixedTextSize(Dimension.SP, size); + getIjk().getSubtitleView().setFixedTextSize(Dimension.SP, size); + } + @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 72df953c7..60522b1af 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -3,10 +3,10 @@ package com.fongmi.android.tv.ui.activity; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; -import android.util.TypedValue; import android.view.KeyEvent; import android.view.View; +import androidx.annotation.Dimension; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.leanback.widget.ArrayObjectAdapter; @@ -36,6 +36,7 @@ import com.fongmi.android.tv.event.PlayerEvent; import com.fongmi.android.tv.impl.Callback; import com.fongmi.android.tv.impl.LiveCallback; import com.fongmi.android.tv.impl.PassCallback; +import com.fongmi.android.tv.impl.SubtitleCallback; import com.fongmi.android.tv.model.LiveViewModel; import com.fongmi.android.tv.player.ExoUtil; import com.fongmi.android.tv.player.Players; @@ -45,6 +46,7 @@ import com.fongmi.android.tv.ui.custom.CustomKeyDownLive; import com.fongmi.android.tv.ui.custom.CustomLiveListView; import com.fongmi.android.tv.ui.custom.dialog.LiveDialog; import com.fongmi.android.tv.ui.custom.dialog.PassDialog; +import com.fongmi.android.tv.ui.custom.dialog.SubtitleDialog; import com.fongmi.android.tv.ui.custom.dialog.TrackDialog; import com.fongmi.android.tv.ui.presenter.ChannelPresenter; import com.fongmi.android.tv.ui.presenter.GroupPresenter; @@ -70,7 +72,7 @@ import okhttp3.Call; import okhttp3.Response; import tv.danmaku.ijk.media.player.ui.IjkVideoView; -public class LiveActivity extends BaseActivity implements GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveListView.Callback, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback { +public class LiveActivity extends BaseActivity implements GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveListView.Callback, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback, SubtitleCallback { private ActivityLiveBinding mBinding; private ArrayObjectAdapter mChannelAdapter; @@ -165,6 +167,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mBinding.control.change.setOnClickListener(view -> onChange()); mBinding.control.player.setOnClickListener(view -> onPlayer()); mBinding.control.decode.setOnClickListener(view -> onDecode()); + mBinding.control.text.setOnLongClickListener(view -> onTextLong()); mBinding.control.speed.setOnLongClickListener(view -> onSpeedLong()); mBinding.video.setOnTouchListener((view, event) -> mKeyDown.onTouchEvent(event)); mBinding.group.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() { @@ -196,15 +199,15 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick private void setVideoView() { mPlayers.set(getExo(), getIjk()); setScale(Setting.getLiveScale()); - getExo().getSubtitleView().setUserDefaultTextSize(); - getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle()); - getIjk().getSubtitleView().setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); + setSubtitle(Setting.getSubtitle()); mBinding.control.speed.setText(mPlayers.getSpeedText()); mBinding.control.invert.setActivated(Setting.isInvert()); mBinding.control.across.setActivated(Setting.isAcross()); mBinding.control.change.setActivated(Setting.isChange()); mBinding.control.home.setVisibility(LiveConfig.isOnly() ? View.GONE : View.VISIBLE); findViewById(R.id.timeBar).setNextFocusUpId(R.id.player); + getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle()); + getIjk().getSubtitleView().setStyle(ExoUtil.getCaptionStyle()); } private void setScale(int scale) { @@ -280,6 +283,12 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick hideControl(); } + private boolean onTextLong() { + SubtitleDialog.create(this).show(); + hideControl(); + return true; + } + private void onHome() { LiveDialog.create(this).show(); hideControl(); @@ -799,6 +808,12 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick else onMenu(); } + @Override + public void setSubtitle(int size) { + getExo().getSubtitleView().setFixedTextSize(Dimension.SP, size); + getIjk().getSubtitleView().setFixedTextSize(Dimension.SP, size); + } + @Override protected void onResume() { super.onResume(); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java index b020735bd..3834083de 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingPlayerActivity.java @@ -9,14 +9,16 @@ import androidx.viewbinding.ViewBinding; import com.fongmi.android.tv.R; import com.fongmi.android.tv.Setting; import com.fongmi.android.tv.databinding.ActivitySettingPlayerBinding; +import com.fongmi.android.tv.impl.SubtitleCallback; import com.fongmi.android.tv.impl.UaCallback; import com.fongmi.android.tv.player.ExoUtil; import com.fongmi.android.tv.player.Players; import com.fongmi.android.tv.ui.base.BaseActivity; +import com.fongmi.android.tv.ui.custom.dialog.SubtitleDialog; import com.fongmi.android.tv.ui.custom.dialog.UaDialog; import com.fongmi.android.tv.utils.ResUtil; -public class SettingPlayerActivity extends BaseActivity implements UaCallback { +public class SettingPlayerActivity extends BaseActivity implements UaCallback, SubtitleCallback { private ActivitySettingPlayerBinding mBinding; private String[] http; @@ -39,6 +41,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback { protected void initView() { mBinding.uaText.setText(Setting.getUa()); mBinding.tunnelText.setText(getSwitch(Setting.isTunnel())); + mBinding.subtitleText.setText(String.valueOf(Setting.getSubtitle())); mBinding.http.setVisibility(Players.isExo(Setting.getPlayer()) ? View.VISIBLE : View.GONE); mBinding.tunnel.setVisibility(Players.isExo(Setting.getPlayer()) ? View.VISIBLE : View.GONE); mBinding.flagText.setText((flag = ResUtil.getStringArray(R.array.select_flag))[Setting.getFlag()]); @@ -51,6 +54,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback { mBinding.http.setOnClickListener(this::setHttp); mBinding.flag.setOnClickListener(this::setFlag); mBinding.tunnel.setOnClickListener(this::setTunnel); + mBinding.subtitle.setOnClickListener(this::onSubtitle); } private void onUa(View view) { @@ -75,9 +79,18 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback { mBinding.tunnelText.setText(getSwitch(Setting.isTunnel())); } + private void onSubtitle(View view) { + SubtitleDialog.create(this).show(); + } + @Override public void setUa(String ua) { mBinding.uaText.setText(ua); Setting.putUa(ua); } + + @Override + public void setSubtitle(int size) { + mBinding.subtitleText.setText(String.valueOf(size)); + } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SubtitleDialog.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SubtitleDialog.java new file mode 100644 index 000000000..a3cef6f9b --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/dialog/SubtitleDialog.java @@ -0,0 +1,62 @@ +package com.fongmi.android.tv.ui.custom.dialog; + +import android.view.LayoutInflater; +import android.view.View; + +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.FragmentActivity; + +import com.fongmi.android.tv.Setting; +import com.fongmi.android.tv.databinding.DialogSubtitleBinding; +import com.fongmi.android.tv.impl.SubtitleCallback; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +public class SubtitleDialog { + + private final DialogSubtitleBinding binding; + private final SubtitleCallback callback; + private final AlertDialog dialog; + private int value; + + public static SubtitleDialog create(FragmentActivity activity) { + return new SubtitleDialog(activity); + } + + public SubtitleDialog(FragmentActivity activity) { + this.callback = (SubtitleCallback) activity; + this.binding = DialogSubtitleBinding.inflate(LayoutInflater.from(activity)); + this.dialog = new MaterialAlertDialogBuilder(activity).setView(binding.getRoot()).create(); + } + + public void show() { + initDialog(); + initView(); + initEvent(); + } + + private void initDialog() { + dialog.getWindow().setDimAmount(0); + dialog.show(); + } + + private void initView() { + binding.slider.setValue(value = Setting.getSubtitle()); + } + + private void initEvent() { + binding.positive.setOnClickListener(this::onPositive); + binding.negative.setOnClickListener(this::onNegative); + binding.slider.addOnChangeListener((slider, value, fromUser) -> callback.setSubtitle((int) value)); + } + + private void onPositive(View view) { + callback.setSubtitle((int) binding.slider.getValue()); + Setting.putSubtitle((int) binding.slider.getValue()); + dialog.dismiss(); + } + + private void onNegative(View view) { + callback.setSubtitle(value); + dialog.dismiss(); + } +} diff --git a/app/src/leanback/res/layout/activity_setting_player.xml b/app/src/leanback/res/layout/activity_setting_player.xml index fb617da21..073fb419d 100644 --- a/app/src/leanback/res/layout/activity_setting_player.xml +++ b/app/src/leanback/res/layout/activity_setting_player.xml @@ -74,6 +74,35 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/android/tv/Setting.java b/app/src/main/java/com/fongmi/android/tv/Setting.java index 49a4e9897..294d5b690 100644 --- a/app/src/main/java/com/fongmi/android/tv/Setting.java +++ b/app/src/main/java/com/fongmi/android/tv/Setting.java @@ -174,6 +174,14 @@ public class Setting { Prefers.put("ua", ua); } + public static int getSubtitle() { + return Prefers.getInt("subtitle", 16); + } + + public static void putSubtitle(int subtitle) { + Prefers.put("subtitle", subtitle); + } + public static boolean isTunnel() { return Prefers.getBoolean("exo_tunnel"); } diff --git a/app/src/main/java/com/fongmi/android/tv/impl/SubtitleCallback.java b/app/src/main/java/com/fongmi/android/tv/impl/SubtitleCallback.java new file mode 100644 index 000000000..468eb0dfe --- /dev/null +++ b/app/src/main/java/com/fongmi/android/tv/impl/SubtitleCallback.java @@ -0,0 +1,6 @@ +package com.fongmi.android.tv.impl; + +public interface SubtitleCallback { + + void setSubtitle(int size); +} diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 2adc309c5..35b0d6f89 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -68,6 +68,7 @@ User-Agent 连线方式 隧道模式 + 字幕大小 线路播放 解码方式 渲染方式 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index b00ed1315..208f055e8 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -68,6 +68,7 @@ User-Agent 連線方式 隧道模式 + 字幕大小 線路播放 解碼方式 渲染方式 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9d4e76f09..848fe11e1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -68,6 +68,7 @@ User-Agent HTTP method Tunnel mode + Subtitle size Flag play Decode Render diff --git a/ijkplayer/build.gradle b/ijkplayer/build.gradle index a5804c4e4..13e5fe1cf 100644 --- a/ijkplayer/build.gradle +++ b/ijkplayer/build.gradle @@ -13,4 +13,6 @@ android { dependencies { implementation 'androidx.annotation:annotation:' + annotationVersion + implementation project(':media-lib-common') + implementation project(':media-lib-ui') } \ No newline at end of file diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java index b4f05bc6c..ef5141102 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java @@ -16,6 +16,7 @@ import android.widget.MediaController; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.media3.ui.SubtitleView; import java.util.List; import java.util.Map; @@ -228,7 +229,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl private void reset() { removeRenderView(); - mSubtitleView.setText(""); + mSubtitleView.setCues(null); mTargetState = STATE_IDLE; mCurrentState = STATE_IDLE; mCurrentBufferPosition = 0; @@ -365,7 +366,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl ITrackInfo trackInfo = trackInfos.get(index); if (trackInfo.getTrackType() != type) continue; if (index == track && selected != track) { - mSubtitleView.setText(""); + mSubtitleView.setCues(null); mPlayer.selectTrack(index); updateForCurrentTrackSelections(); if (text && position > 0) seekTo(position); @@ -380,7 +381,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl ITrackInfo trackInfo = trackInfos.get(index); if (trackInfo.getTrackType() != type) continue; if (index == track && selected == track) { - mSubtitleView.setText(""); + mSubtitleView.setCues(null); mPlayer.deselectTrack(track); updateForCurrentTrackSelections(); } @@ -511,7 +512,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl @Override public void onTimedText(IMediaPlayer mp, IjkTimedText text) { - mSubtitleView.onSubtitleChanged(text.getText()); + mSubtitleView.setCues(SubtitleParser.parse(text.getText())); } @Override diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/SubtitleView.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/SubtitleView.java deleted file mode 100644 index 7af52f9e7..000000000 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/SubtitleView.java +++ /dev/null @@ -1,62 +0,0 @@ -package tv.danmaku.ijk.media.player.ui; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.text.Html; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.widget.TextView; - -import androidx.annotation.Nullable; - -public class SubtitleView extends TextView { - - private final float strokeWidth; - private boolean isDrawing; - - public SubtitleView(Context context) { - this(context, null); - } - - public SubtitleView(Context context, @Nullable AttributeSet attrs) { - this(context, attrs, 0); - } - - public SubtitleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - strokeWidth = Util.dp2px(getContext(), 0.8f); - } - - public void onSubtitleChanged(String text) { - if (TextUtils.isEmpty(text)) { - setText(""); - } else { - setText(Html.fromHtml(text.replaceAll("\r\n", "
").replaceAll("\r", "
").replaceAll("\n", "
").replaceAll("\\{\\\\.*?\\}", ""))); - } - } - - @Override - public void invalidate() { - if (isDrawing) return; - super.invalidate(); - } - - @Override - protected void onDraw(Canvas canvas) { - isDrawing = true; - Paint paint = getPaint(); - paint.setStyle(Paint.Style.FILL); - setTextColor(Color.WHITE); - super.onDraw(canvas); - paint.setStyle(Paint.Style.STROKE); - paint.setStrokeJoin(Paint.Join.ROUND); - paint.setStrokeWidth(strokeWidth); - setTextColor(Color.BLACK); - super.onDraw(canvas); - paint.setStyle(Paint.Style.FILL); - setTextColor(Color.WHITE); - isDrawing = false; - } -} diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/Util.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/Util.java index 1fe3a6df2..c9f12cf10 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/Util.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/Util.java @@ -2,12 +2,17 @@ package tv.danmaku.ijk.media.player.ui; import android.content.Context; import android.util.DisplayMetrics; +import android.util.TypedValue; public class Util { public static final String USER_AGENT = "User-Agent"; - public static float dp2px(Context context, float dpValue) { - return (dpValue * context.getResources().getDisplayMetrics().densityDpi) / DisplayMetrics.DENSITY_DEFAULT; + public static float dp2px(Context context, float dp) { + return (dp * context.getResources().getDisplayMetrics().densityDpi) / DisplayMetrics.DENSITY_DEFAULT; + } + + public static float sp2px(Context context, float sp) { + return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics()); } } diff --git a/ijkplayer/src/main/res/layout/ijk_player_view.xml b/ijkplayer/src/main/res/layout/ijk_player_view.xml index 991d3b96b..11fd9a03d 100644 --- a/ijkplayer/src/main/res/layout/ijk_player_view.xml +++ b/ijkplayer/src/main/res/layout/ijk_player_view.xml @@ -15,14 +15,11 @@ android:scaleType="fitCenter" android:visibility="gone" /> - - + + +