主要参考https://blog.csdn.net/chengxu_hou/article/details/78144607
不同之处在于我用的 JCVideoPlayer播放视频,参考的博主用的是VideoView播放视频的,主要逻辑与思路,参考上篇博客博主。
代码其实不难理解:禁用了ViewPager的预加载模式,重写了一下viewPager,利用Handler与ViewPager实现轮播,Timer定时,Handler实现更新UI。
下面直接上代码:
public class TestActivity extends BaseActivity {
private static final int UPTATE_VIEWPAGER = 0;
public ViewPagers mViewPager;
private List list;
private BannerViewAdapter mAdapter;
private int autoCurrIndex = 0;//设置当前 第几个图片 被选中
private Timer timer;
private TimerTask timerTask;
private long period = 5000;//轮播图展示时长,默认5秒
//定时轮播图片,需要在主线程里面修改 UI
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case UPTATE_VIEWPAGER:
if (msg.arg1 != 0) {
mViewPager.setCurrentItem(msg.arg1);
} else {
//false 当从末页调到首页时,不显示翻页动画效果,
mViewPager.setCurrentItem(msg.arg1, false);
}
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
ButterKnife.bind(this);
mViewPager = findViewById(R.id.viewPager);
initData();
}
/**
* 广告轮播图测试数据
*/
public void initData() {
list = new ArrayList<>();
for (int i = 0; i < 6; i++) {
BannerModel listBean = new BannerModel();
if (i == 1 || i == 3 || i== 5) {
listBean.setBannerName("动画片");
// listBean.setBannerUrl("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");
listBean.setBannerUrl("http://vodfile1.0086org.com/UF/vod/201805/1116/9814/3222510/ios/1805071131507290.mp4");
listBean.setPlayTime(27000);
listBean.setUrlType(1);//图片类型 视频
list.add(listBean);
}else{
listBean.setBannerName("广告");
listBean.setBannerUrl("http://pic11.nipic.com/20101201/4452735_182232064453_2.jpg");
listBean.setPlayTime(2000);
listBean.setUrlType(0);//图片类型 图片
list.add(listBean);
}
}
period = list.get(0).getPlayTime();
autoBanner();
}
private void autoBanner(){
mViewPager.setOffscreenPageLimit(0);
mAdapter = new BannerViewAdapter(this,list);
mViewPager.setAdapter(mAdapter);
mViewPager.setOnPageChangeListener(new ViewPagers.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
autoCurrIndex = position;//动态设定轮播图每一页的停留时间
period = list.get(position).getPlayTime();
if (timer != null) {//每次改变都需要重新创建定时器
timer.cancel();
timer = null;
timer = new Timer();
if (timerTask != null) {
timerTask.cancel();
timerTask = null;
createTimerTask();
}
timer.schedule(timerTask, period, period);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
createTimerTask();//创建定时器
timer = new Timer();
timer.schedule(timerTask, 5000, period);
}
public void createTimerTask(){
timerTask = new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = UPTATE_VIEWPAGER;
if (autoCurrIndex == list.size() - 1) {
autoCurrIndex = -1;
}
message.arg1 = autoCurrIndex + 1;
mHandler.sendMessage(message);
}
};
}
@Override
protected void onResume() {
super.onResume();
}
protected void onPause() {
super.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (timerTask != null) {
timerTask.cancel();
timerTask = null;
}
if (timer != null) {
timer.cancel();
timer = null;
}
}
}
public class BannerViewAdapter extends PagerAdapter {
private Context context;
private List listBean;
public BannerViewAdapter(Activity context, List list) {
// this.context = context.getApplicationContext();
this.context = context;
if (list == null || list.size() == 0) {
this.listBean = new ArrayList<>();
} else {
this.listBean = list;
}
}
@Override
public Object instantiateItem(final ViewGroup container, final int position) {
if (listBean.get(position).getUrlType() == 0) {//图片
final ImageView imageView = new ImageView(context);
Glide.with(context).load(listBean.get(position).getBannerUrl())
// .skipMemoryCache(true)
.into(imageView);
container.addView(imageView);
return imageView;
} else {//视频
// final VideoView videoView = new VideoView(context);
// videoView.setVideoURI(Uri.parse(listBean.get(position).getBannerUrl()));
// //开始播放
// videoView.start();
// container.addView(videoView);
JCVideoPlayerStandard jcVideoPlayer = new JCVideoPlayerStandard(context);
jcVideoPlayer.setUp(listBean.get(position).getBannerUrl()
, JCVideoPlayerStandard.SCREEN_LAYOUT_NORMAL, "不信");
Glide.with(context)
.load("http://img4.jiecaojingxuan.com/2016/11/23/00b026e7-b830-4994-bc87-38f4033806a6.jpg@!640_360")
.into(jcVideoPlayer.thumbImageView);
jcVideoPlayer.prepareMediaPlayer();
container.addView(jcVideoPlayer);
return jcVideoPlayer;
}
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public int getCount() {
return listBean.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == (View) object;
}
}
public class BannerModel {
private String bannerName;
private String bannerUrl;
private int playTime;//播放时长
private int urlType;//类型:0图片、1视频
public String getBannerName() {
return bannerName;
}
public void setBannerName(String bannerName) {
this.bannerName = bannerName;
}
public String getBannerUrl() {
return bannerUrl;
}
public void setBannerUrl(String bannerUrl) {
this.bannerUrl = bannerUrl;
}
public int getPlayTime() {
return playTime;
}
public void setPlayTime(int playTime) {
this.playTime = playTime;
}
public int getUrlType() {
return urlType;
}
public void setUrlType(int urlType) {
this.urlType = urlType;
}
}
ViewPagers是重新的ViewPager,与v4包的ViewPager只有一点不一样,就是
private static final int DEFAULT_OFFSCREEN_PAGES = 0;//默认是1,这里直接改为0
v4包的ViewPager直接复制一遍,将这里改掉,extend使用即可。
好了,亲测好使。
package fm.jiecao.jcvideoplayer_lib;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import com.example.jcvideoplayer_lib.R;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by Nathen
* On 2016/04/18 16:15
*/
public class JCVideoPlayerStandard extends JCVideoPlayer {
protected static Timer DISMISS_CONTROL_VIEW_TIMER;
public ImageView backButton;
public ProgressBar bottomProgressBar, loadingProgressBar;
public TextView titleTextView;
public ImageView thumbImageView;
public ImageView tinyBackImageView;
protected DismissControlViewTimerTask mDismissControlViewTimerTask;
public JCVideoPlayerStandard(Context context) {
super(context);
}
public JCVideoPlayerStandard(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void init(Context context) {
super.init(context);
bottomProgressBar = (ProgressBar) findViewById(R.id.bottom_progress);
titleTextView = (TextView) findViewById(R.id.title);
backButton = (ImageView) findViewById(R.id.back);
thumbImageView = (ImageView) findViewById(R.id.thumb);
loadingProgressBar = (ProgressBar) findViewById(R.id.loading);
tinyBackImageView = (ImageView) findViewById(R.id.back_tiny);
thumbImageView.setOnClickListener(this);
backButton.setOnClickListener(this);
tinyBackImageView.setOnClickListener(this);
}
@Override
public void setUp(String url, int screen, Object... objects) {
super.setUp(url, screen, objects);
if (objects.length == 0) return;
titleTextView.setText(objects[0].toString());
if (currentScreen == SCREEN_WINDOW_FULLSCREEN) {
fullscreenButton.setImageResource(R.drawable.jc_shrink);
backButton.setVisibility(View.VISIBLE);
tinyBackImageView.setVisibility(View.INVISIBLE);
changeStartButtonSize((int) getResources().getDimension(R.dimen.jc_start_button_w_h_fullscreen));
} else if (currentScreen == SCREEN_LAYOUT_NORMAL
|| currentScreen == SCREEN_LAYOUT_LIST) {
fullscreenButton.setImageResource(R.drawable.jc_enlarge);
backButton.setVisibility(View.GONE);
tinyBackImageView.setVisibility(View.INVISIBLE);
changeStartButtonSize((int) getResources().getDimension(R.dimen.jc_start_button_w_h_normal));
} else if (currentScreen == SCREEN_WINDOW_TINY) {
tinyBackImageView.setVisibility(View.VISIBLE);
setAllControlsVisible(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE,
View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE);
}
}
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 int getLayoutId() {
return R.layout.jc_layout_standard;
}
@Override
public void setUiWitStateAndScreen(int state) {
super.setUiWitStateAndScreen(state);
switch (currentState) {
case CURRENT_STATE_NORMAL:
changeUiToNormal();
break;
case CURRENT_STATE_PREPARING:
changeUiToPreparingShow();
startDismissControlViewTimer();
break;
case CURRENT_STATE_PLAYING:
changeUiToPlayingShow();
startDismissControlViewTimer();
break;
case CURRENT_STATE_PAUSE:
changeUiToPauseShow();
cancelDismissControlViewTimer();
break;
case CURRENT_STATE_ERROR:
changeUiToError();
break;
case CURRENT_STATE_AUTO_COMPLETE:
changeUiToCompleteShow();
cancelDismissControlViewTimer();
bottomProgressBar.setProgress(100);
break;
case CURRENT_STATE_PLAYING_BUFFERING_START:
changeUiToPlayingBufferingShow();
break;
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int id = v.getId();
if (id == R.id.surface_container) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
startDismissControlViewTimer();
if (mChangePosition) {
int duration = getDuration();
int progress = mSeekTimePosition * 100 / (duration == 0 ? 1 : duration);
bottomProgressBar.setProgress(progress);
}
if (!mChangePosition && !mChangeVolume) {
onEvent(JCUserActionStandard.ON_CLICK_BLANK);
onClickUiToggle();
}
break;
}
} else if (id == 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 (TextUtils.isEmpty(url)) {
Toast.makeText(getContext(), getResources().getString(R.string.no_url), Toast.LENGTH_SHORT).show();
return;
}
if (currentState == CURRENT_STATE_NORMAL) {
if (!url.startsWith("file") && !url.startsWith("/") &&
!JCUtils.isWifiConnected(getContext()) && !WIFI_TIP_DIALOG_SHOWED) {
showWifiDialog();
return;
}
startVideo();
} else if (currentState == CURRENT_STATE_AUTO_COMPLETE) {
onClickUiToggle();
}
} else if (i == R.id.surface_container) {
startDismissControlViewTimer();
} else if (i == R.id.back) {
backPress();
} else if (i == R.id.back_tiny) {
backPress();
}
}
@Override
public void showWifiDialog() {
super.showWifiDialog();
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setMessage(getResources().getString(R.string.tips_not_wifi));
builder.setPositiveButton(getResources().getString(R.string.tips_not_wifi_confirm), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
startVideo();
WIFI_TIP_DIALOG_SHOWED = true;
}
});
builder.setNegativeButton(getResources().getString(R.string.tips_not_wifi_cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
super.onStartTrackingTouch(seekBar);
cancelDismissControlViewTimer();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
super.onStopTrackingTouch(seekBar);
startDismissControlViewTimer();
}
public void startVideo() {
prepareMediaPlayer();
onEvent(JCUserActionStandard.ON_CLICK_START_THUMB);
}
public void onClickUiToggle() {
if (currentState == CURRENT_STATE_PREPARING) {
if (bottomContainer.getVisibility() == View.VISIBLE) {
changeUiToPreparingClear();
} else {
changeUiToPreparingShow();
}
} 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();
}
} else if (currentState == CURRENT_STATE_AUTO_COMPLETE) {
if (bottomContainer.getVisibility() == View.VISIBLE) {
changeUiToCompleteClear();
} else {
changeUiToCompleteShow();
}
} else if (currentState == CURRENT_STATE_PLAYING_BUFFERING_START) {
if (bottomContainer.getVisibility() == View.VISIBLE) {
changeUiToPlayingBufferingClear();
} else {
changeUiToPlayingBufferingShow();
}
}
}
public void onCLickUiToggleToClear() {
if (currentState == CURRENT_STATE_PREPARING) {
if (bottomContainer.getVisibility() == View.VISIBLE) {
changeUiToPreparingClear();
} 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) {
changeUiToCompleteClear();
} else {
}
} else if (currentState == CURRENT_STATE_PLAYING_BUFFERING_START) {
if (bottomContainer.getVisibility() == View.VISIBLE) {
changeUiToPlayingBufferingClear();
} else {
}
}
}
@Override
public void setProgressAndText() {
super.setProgressAndText();
int position = getCurrentPositionWhenPlaying();
int duration = getDuration();
int progress = position * 100 / (duration == 0 ? 1 : 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);
}
//Unified management Ui
public void changeUiToNormal() {
switch (currentScreen) {
case SCREEN_LAYOUT_NORMAL:
case SCREEN_LAYOUT_LIST:
setAllControlsVisible(View.VISIBLE, View.INVISIBLE, View.VISIBLE,
View.INVISIBLE, View.VISIBLE, View.VISIBLE, View.INVISIBLE);
updateStartImage();
break;
case SCREEN_WINDOW_FULLSCREEN:
setAllControlsVisible(View.VISIBLE, View.INVISIBLE, View.VISIBLE,
View.INVISIBLE, View.VISIBLE, View.VISIBLE, View.INVISIBLE);
updateStartImage();
break;
case SCREEN_WINDOW_TINY:
break;
}
}
public void changeUiToPreparingShow() {
switch (currentScreen) {
case SCREEN_LAYOUT_NORMAL:
case SCREEN_LAYOUT_LIST:
setAllControlsVisible(View.VISIBLE, View.INVISIBLE, View.INVISIBLE,
View.VISIBLE, View.VISIBLE, View.VISIBLE, View.INVISIBLE);
break;
case SCREEN_WINDOW_FULLSCREEN:
setAllControlsVisible(View.VISIBLE, View.INVISIBLE, View.INVISIBLE,
View.VISIBLE, View.VISIBLE, View.VISIBLE, View.INVISIBLE);
break;
case SCREEN_WINDOW_TINY:
break;
}
}
public void changeUiToPreparingClear() {
switch (currentScreen) {
case SCREEN_LAYOUT_NORMAL:
case SCREEN_LAYOUT_LIST:
setAllControlsVisible(View.VISIBLE, View.INVISIBLE, View.INVISIBLE,
View.VISIBLE, View.VISIBLE, View.VISIBLE, View.INVISIBLE);
break;
case SCREEN_WINDOW_FULLSCREEN:
setAllControlsVisible(View.VISIBLE, View.INVISIBLE, View.INVISIBLE,
View.VISIBLE, View.VISIBLE, View.VISIBLE, View.INVISIBLE);
break;
case SCREEN_WINDOW_TINY:
break;
}
}
//JustPreparedUi
@Override
public void onPrepared() {
super.onPrepared();
setAllControlsVisible(View.VISIBLE, View.INVISIBLE, View.INVISIBLE,
View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE);
startDismissControlViewTimer();
}
public void changeUiToPlayingShow() {
switch (currentScreen) {
case SCREEN_LAYOUT_NORMAL:
case SCREEN_LAYOUT_LIST:
setAllControlsVisible(View.VISIBLE, View.VISIBLE, View.VISIBLE,
View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE);
updateStartImage();
break;
case SCREEN_WINDOW_FULLSCREEN:
setAllControlsVisible(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_LAYOUT_NORMAL:
case SCREEN_LAYOUT_LIST:
setAllControlsVisible(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE,
View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE);
break;
case SCREEN_WINDOW_FULLSCREEN:
setAllControlsVisible(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE,
View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE);
break;
case SCREEN_WINDOW_TINY:
break;
}
}
public void changeUiToPauseShow() {
switch (currentScreen) {
case SCREEN_LAYOUT_NORMAL:
case SCREEN_LAYOUT_LIST:
setAllControlsVisible(View.VISIBLE, View.VISIBLE, View.VISIBLE,
View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE);
updateStartImage();
break;
case SCREEN_WINDOW_FULLSCREEN:
setAllControlsVisible(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_LAYOUT_NORMAL:
case SCREEN_LAYOUT_LIST:
setAllControlsVisible(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE,
View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE);
break;
case SCREEN_WINDOW_FULLSCREEN:
setAllControlsVisible(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE,
View.INVISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE);
break;
case SCREEN_WINDOW_TINY:
break;
}
}
public void changeUiToPlayingBufferingShow() {
switch (currentScreen) {
case SCREEN_LAYOUT_NORMAL:
case SCREEN_LAYOUT_LIST:
setAllControlsVisible(View.VISIBLE, View.VISIBLE, View.INVISIBLE,
View.VISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE);
break;
case SCREEN_WINDOW_FULLSCREEN:
setAllControlsVisible(View.VISIBLE, View.VISIBLE, View.INVISIBLE,
View.VISIBLE, View.INVISIBLE, View.INVISIBLE, View.INVISIBLE);
break;
case SCREEN_WINDOW_TINY:
break;
}
}
public void changeUiToPlayingBufferingClear() {
switch (currentScreen) {
case SCREEN_LAYOUT_NORMAL:
case SCREEN_LAYOUT_LIST:
setAllControlsVisible(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE,
View.VISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE);
updateStartImage();
break;
case SCREEN_WINDOW_FULLSCREEN:
setAllControlsVisible(View.INVISIBLE, View.INVISIBLE, View.INVISIBLE,
View.VISIBLE, View.INVISIBLE, View.INVISIBLE, View.VISIBLE);
updateStartImage();
break;
case SCREEN_WINDOW_TINY:
break;
}
}
public void changeUiToCompleteShow() {
switch (currentScreen) {
case SCREEN_LAYOUT_NORMAL:
case SCREEN_LAYOUT_LIST:
setAllControlsVisible(View.VISIBLE, View.VISIBLE, View.VISIBLE,
View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE);
updateStartImage();
break;
case SCREEN_WINDOW_FULLSCREEN:
setAllControlsVisible(View.VISIBLE, View.VISIBLE, View.VISIBLE,
View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.INVISIBLE);
updateStartImage();
break;
case SCREEN_WINDOW_TINY:
break;
}
}
public void changeUiToCompleteClear() {
switch (currentScreen) {
case SCREEN_LAYOUT_NORMAL:
case SCREEN_LAYOUT_LIST:
setAllControlsVisible(View.INVISIBLE, View.INVISIBLE, View.VISIBLE,
View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.VISIBLE);
updateStartImage();
break;
case SCREEN_WINDOW_FULLSCREEN:
setAllControlsVisible(View.INVISIBLE, View.INVISIBLE, View.VISIBLE,
View.INVISIBLE, View.VISIBLE, View.INVISIBLE, View.VISIBLE);
updateStartImage();
break;
case SCREEN_WINDOW_TINY:
break;
}
}
public void changeUiToError() {
switch (currentScreen) {
case SCREEN_LAYOUT_NORMAL:
case SCREEN_LAYOUT_LIST:
setAllControlsVisible(View.INVISIBLE, View.INVISIBLE, View.VISIBLE,
View.INVISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE);
updateStartImage();
break;
case SCREEN_WINDOW_FULLSCREEN:
setAllControlsVisible(View.INVISIBLE, View.INVISIBLE, View.VISIBLE,
View.INVISIBLE, View.INVISIBLE, View.VISIBLE, View.INVISIBLE);
updateStartImage();
break;
case SCREEN_WINDOW_TINY:
break;
}
}
public void setAllControlsVisible(int topCon, int bottomCon, int startBtn, int loadingPro,
int thumbImg, int coverImg, int bottomPro) {
topContainer.setVisibility(topCon);
bottomContainer.setVisibility(bottomCon);
startButton.setVisibility(startBtn);
loadingProgressBar.setVisibility(loadingPro);
thumbImageView.setVisibility(thumbImg);
bottomProgressBar.setVisibility(bottomPro);
}
public void updateStartImage() {
if (currentState == CURRENT_STATE_PLAYING) {
startButton.setImageResource(R.drawable.jc_click_pause_selector);
} else if (currentState == CURRENT_STATE_ERROR) {
startButton.setImageResource(R.drawable.jc_click_error_selector);
} else {
startButton.setImageResource(R.drawable.jc_click_play_selector);
}
}
protected Dialog mProgressDialog;
protected ProgressBar mDialogProgressBar;
protected TextView mDialogSeekTime;
protected TextView mDialogTotalTime;
protected ImageView mDialogIcon;
@Override
public void showProgressDialog(float deltaX, String seekTime, int seekTimePosition, String totalTime, int totalTimeDuration) {
super.showProgressDialog(deltaX, seekTime, seekTimePosition, totalTime, totalTimeDuration);
if (mProgressDialog == null) {
View localView = LayoutInflater.from(getContext()).inflate(R.layout.jc_dialog_progress, null);
mDialogProgressBar = ((ProgressBar) localView.findViewById(R.id.duration_progressbar));
mDialogSeekTime = ((TextView) localView.findViewById(R.id.tv_current));
mDialogTotalTime = ((TextView) localView.findViewById(R.id.tv_duration));
mDialogIcon = ((ImageView) localView.findViewById(R.id.duration_image_tip));
mProgressDialog = new Dialog(getContext(), R.style.jc_style_dialog_progress);
mProgressDialog.setContentView(localView);
mProgressDialog.getWindow().addFlags(Window.FEATURE_ACTION_BAR);
mProgressDialog.getWindow().addFlags(32);
mProgressDialog.getWindow().addFlags(16);
mProgressDialog.getWindow().setLayout(-2, -2);
WindowManager.LayoutParams localLayoutParams = mProgressDialog.getWindow().getAttributes();
localLayoutParams.gravity = Gravity.CENTER;
mProgressDialog.getWindow().setAttributes(localLayoutParams);
}
if (!mProgressDialog.isShowing()) {
mProgressDialog.show();
}
mDialogSeekTime.setText(seekTime);
mDialogTotalTime.setText(" / " + totalTime);
mDialogProgressBar.setProgress(totalTimeDuration <= 0 ? 0 : (seekTimePosition * 100 / totalTimeDuration));
if (deltaX > 0) {
mDialogIcon.setBackgroundResource(R.drawable.jc_forward_icon);
} else {
mDialogIcon.setBackgroundResource(R.drawable.jc_backward_icon);
}
onCLickUiToggleToClear();
}
@Override
public void dismissProgressDialog() {
super.dismissProgressDialog();
if (mProgressDialog != null) {
mProgressDialog.dismiss();
}
}
protected Dialog mVolumeDialog;
protected ProgressBar mDialogVolumeProgressBar;
protected TextView mDialogVolumeTextView;
protected ImageView mDialogVolumeImageView;
@Override
public void showVolumeDialog(float deltaY, int volumePercent) {
super.showVolumeDialog(deltaY, volumePercent);
if (mVolumeDialog == null) {
View localView = LayoutInflater.from(getContext()).inflate(R.layout.jc_dialog_volume, null);
mDialogVolumeImageView = ((ImageView) localView.findViewById(R.id.volume_image_tip));
mDialogVolumeTextView = ((TextView) localView.findViewById(R.id.tv_volume));
mDialogVolumeProgressBar = ((ProgressBar) localView.findViewById(R.id.volume_progressbar));
mVolumeDialog = new Dialog(getContext(), R.style.jc_style_dialog_progress);
mVolumeDialog.setContentView(localView);
mVolumeDialog.getWindow().addFlags(8);
mVolumeDialog.getWindow().addFlags(32);
mVolumeDialog.getWindow().addFlags(16);
mVolumeDialog.getWindow().setLayout(-2, -2);
WindowManager.LayoutParams localLayoutParams = mVolumeDialog.getWindow().getAttributes();
localLayoutParams.gravity = Gravity.CENTER;
mVolumeDialog.getWindow().setAttributes(localLayoutParams);
}
if (!mVolumeDialog.isShowing()) {
mVolumeDialog.show();
}
if (volumePercent <= 0) {
mDialogVolumeImageView.setBackgroundResource(R.drawable.jc_close_volume);
} else {
mDialogVolumeImageView.setBackgroundResource(R.drawable.jc_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();
}
}
protected Dialog mBrightnessDialog;
protected ProgressBar mDialogBrightnessProgressBar;
protected TextView mDialogBrightnessTextView;
@Override
public void showBrightnessDialog(int brightnessPercent) {
super.showBrightnessDialog(brightnessPercent);
if (mBrightnessDialog == null) {
View localView = LayoutInflater.from(getContext()).inflate(R.layout.jc_dialog_brightness, null);
mDialogBrightnessTextView = ((TextView) localView.findViewById(R.id.tv_brightness));
mDialogBrightnessProgressBar = ((ProgressBar) localView.findViewById(R.id.brightness_progressbar));
mBrightnessDialog = new Dialog(getContext(), R.style.jc_style_dialog_progress);
mBrightnessDialog.setContentView(localView);
mBrightnessDialog.getWindow().addFlags(Window.FEATURE_ACTION_BAR);
mBrightnessDialog.getWindow().addFlags(32);
mBrightnessDialog.getWindow().addFlags(16);
mBrightnessDialog.getWindow().setLayout(-2, -2);
WindowManager.LayoutParams localLayoutParams = mBrightnessDialog.getWindow().getAttributes();
localLayoutParams.gravity = Gravity.CENTER;
mBrightnessDialog.getWindow().setAttributes(localLayoutParams);
}
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 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();
}
}
public class DismissControlViewTimerTask extends TimerTask {
@Override
public void run() {
if (currentState != CURRENT_STATE_NORMAL
&& currentState != CURRENT_STATE_ERROR
&& currentState != CURRENT_STATE_AUTO_COMPLETE) {
if (getContext() != null && getContext() instanceof Activity) {
((Activity) getContext()).runOnUiThread(new Runnable() {
@Override
public void run() {
bottomContainer.setVisibility(View.INVISIBLE);
topContainer.setVisibility(View.INVISIBLE);
startButton.setVisibility(View.INVISIBLE);
if (currentScreen != SCREEN_WINDOW_TINY) {
bottomProgressBar.setVisibility(View.VISIBLE);
}
}
});
}
}
}
}
@Override
public void onAutoCompletion() {
super.onAutoCompletion();
cancelDismissControlViewTimer();
}
@Override
public void onCompletion() {
super.onCompletion();
cancelDismissControlViewTimer();
}
}