From 21a3b19894807c46f96e2106a5acb92d8afbd720 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期三, 30 九月 2020 17:28:17 +0800 Subject: [PATCH] 百度内容输出集成 --- library-mine/src/com/lcjian/library/video/VideoPlayerController.java | 847 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 781 insertions(+), 66 deletions(-) diff --git a/library-mine/src/com/lcjian/library/video/VideoPlayerController.java b/library-mine/src/com/lcjian/library/video/VideoPlayerController.java index d92d048..8f09327 100644 --- a/library-mine/src/com/lcjian/library/video/VideoPlayerController.java +++ b/library-mine/src/com/lcjian/library/video/VideoPlayerController.java @@ -3,22 +3,48 @@ import android.app.Activity; import android.content.Context; import android.content.pm.ActivityInfo; +import android.graphics.Color; +import android.media.AudioManager; import android.media.MediaPlayer; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; import android.util.AttributeSet; import android.util.Log; import android.view.GestureDetector; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.view.animation.LinearInterpolator; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; +import android.widget.PopupWindow; import android.widget.SeekBar; import android.widget.TextView; +import android.widget.Toast; +import com.androidquery.AQuery; import com.lcjian.lcjianlibrary.R; +import com.lcjian.library.entity.eventbus.PlayerControllerShow; +import com.lcjian.library.entity.eventbus.PlayerLock; +import com.lcjian.library.util.common.DimenUtils; +import com.lcjian.library.util.common.TimeUtil; + +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; + +import de.greenrobot.event.EventBus; + +import static android.content.Context.AUDIO_SERVICE; public class VideoPlayerController extends FrameLayout { @@ -28,6 +54,12 @@ private MediaPlayer mediaPlayer; private IVideoPlayerListener videoPlayerListener; + private List<VideoEpisode> episodeList; + private String videoName; + private String videoUrl; + private boolean collected;//鏄惁鏀惰棌 + + private Timer timer; //瀹瑰櫒 @@ -38,6 +70,7 @@ private ImageView iv_back;//杩斿洖 private TextView tv_title;//鏍囬 + private TextView tv_link;//閾炬帴 private ImageView iv_electric;//鐢甸噺 private TextView tv_time;//褰撳墠鏃堕棿 private ImageView iv_lock;//閿佸睆 @@ -47,38 +80,45 @@ private TextView tv_progress;//鐜板湪鐨勬挱鏀捐繘搴� private TextView tv_duration;//瑙嗛鎬绘椂闀� private TextView tv_definition;//娓呮櫚搴� - private ImageView iv_episode;//閫夐泦 private ImageView iv_full_screen; + private TextView tv_resource; - public VideoPlayerController setMediaPlayer(MediaPlayer mediaPlayer) { - this.mediaPlayer = mediaPlayer; - return this; - } + private boolean needNotifyMobileData = true; - public VideoPlayerController setVideoPlayerListener(IVideoPlayerListener videoPlayerListener) { - this.videoPlayerListener = videoPlayerListener; - return this; - } + //瑙嗛娓呮櫚搴� + private List<VideoDefinition> videoDefinitionList; - public VideoPlayerController setContentView(View contentView) { - this.contentView = contentView; - return this; - } + //褰撳墠娓呮櫚搴� + private VideoDefinition currentDefinition; + private ImageView iv_collection, iv_download, iv_share, iv_episode;//鏀惰棌锛屼笅杞斤紝鍒嗕韩锛岄�夐泦 + + //鏄惁鍙互闅愯棌 + private boolean canHiddenController = true; + + //姝e湪鎾斁鐨勪綅缃� + private int mPlayingPosition; + + private AQuery aq; public VideoPlayerController(@NonNull Context context) { super(context); + timer = new Timer(); } public VideoPlayerController(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); + timer = new Timer(); LayoutInflater.from(context).inflate(R.layout.video_player_controller, this); + aq = new AQuery(this); + fl_bottom = findViewById(R.id.fl_bottom); ll_top = findViewById(R.id.ll_top); iv_back = findViewById(R.id.iv_back); tv_title = findViewById(R.id.tv_title); + tv_link = findViewById(R.id.tv_link); iv_electric = findViewById(R.id.iv_electric); tv_time = findViewById(R.id.tv_time); iv_lock = findViewById(R.id.iv_lock); @@ -90,35 +130,284 @@ tv_definition = findViewById(R.id.tv_definition); iv_episode = findViewById(R.id.iv_episode); iv_full_screen = findViewById(R.id.iv_full_screen); + iv_collection = findViewById(R.id.iv_collection); + iv_download = findViewById(R.id.iv_download); + iv_share = findViewById(R.id.iv_share); + iv_episode = findViewById(R.id.iv_episode); + + tv_resource = findViewById(R.id.tv_resource); + iv_full_screen.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { - mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + if (mActivity != null) + mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } }); + //瀹氭椂鍣� + timer.schedule(new TimerTask() { + @Override + public void run() { + if (tv_time != null) { + tv_time.post(new Runnable() { + @Override + public void run() { + if (tv_time != null) + tv_time.setText(TimeUtil.getGeneralTime(System.currentTimeMillis(), "HH:mm")); + } + }); + + } + } + }, 0, 1000); + + initLoading(); + + showController(); } + + //鍔犺浇妗嗗垵濮嬪寲 + private void initLoading() { + ImageView imageView = findViewById(R.id.iv_loading); + Animation operatingAnim = AnimationUtils.loadAnimation(getContext(), R.anim.rotate_dialog_player_loading); + LinearInterpolator lin = new LinearInterpolator(); + operatingAnim.setInterpolator(lin); + imageView.setAnimation(operatingAnim); + operatingAnim.start(); + } + + + public VideoPlayerController setVideoPlayerListener(IVideoPlayerListener videoPlayerListener) { + this.videoPlayerListener = videoPlayerListener; + return this; + } + + /** + * 璁剧疆瑙嗛淇℃伅 + * + * @param episodeList + * @param videoName + * @param videoUrl + * @param playingPosition + * @return + */ + public VideoPlayerController setVideoInfo(List<VideoEpisode> episodeList, String videoName, String videoUrl, int playingPosition) { + this.videoName = videoName; + this.videoUrl = videoUrl; + this.episodeList = episodeList; + this.mPlayingPosition = playingPosition; + return this; + } + + public VideoPlayerController setContentView(View contentView) { + this.contentView = contentView; + return this; + } + + + /** + * 鏄惁鏀惰棌 + * + * @param select + */ + public void setCollect(boolean select) { + if (select) + iv_collection.setImageResource(R.drawable.ic_player_collected); + else + iv_collection.setImageResource(R.drawable.ic_player_collecte); + } + + /** + * 璁剧疆娓呮櫚搴� + * + * @param definitionList + * @param currentDefinition + */ + public void setDefinition(List<VideoDefinition> definitionList, VideoDefinition currentDefinition) { + this.videoDefinitionList = definitionList; + this.currentDefinition = currentDefinition; + if (currentDefinition != null) { + tv_definition.setText("娓呮櫚搴︼細" + currentDefinition.getName()); + if (isLand) { + tv_definition.setVisibility(View.VISIBLE); + } + } + } + + //缃戠粶鎻愮ず寮规 + private VideoDataNotifyDialog networkNotiftDialog; + + /** + * TODO + * 璁剧疆缃戠粶鐘舵�� + * + * @param networkInfo + */ + //璁剧疆褰撳墠缃戠粶鐘舵�� + public synchronized void setNetworkInfo(NetworkInfo networkInfo, boolean firstSet) { + //璇存槑褰撳墠鏈夌綉缁� + if (networkInfo != null && networkInfo.isAvailable()) { + if (mActivity == null) + return; + int type = networkInfo.getType(); + switch (type) { + case ConnectivityManager.TYPE_MOBILE: + //鎻愮ず鏄惁缁х画鎾斁 + if (needNotifyMobileData) { + pausePlay(); + if (networkNotiftDialog == null) + networkNotiftDialog = new VideoDataNotifyDialog.Builder().setDialogClick(new VideoDataNotifyDialog.IDialogClick() { + @Override + public void continuePlay() { + VideoPlayerController.this.continuePlay(); + //涓嶉渶瑕佹彁閱� + needNotifyMobileData = false; + } + + @Override + public void close() { + + } + }).build(mActivity); + if (!networkNotiftDialog.isShowing()) + networkNotiftDialog.show(); + } + break; + case ConnectivityManager.TYPE_WIFI: + if (networkNotiftDialog != null && networkNotiftDialog.isShowing()) + networkNotiftDialog.dismiss(); + if (firstSet) + VideoPlayerController.this.continuePlay(); + break; + case ConnectivityManager.TYPE_ETHERNET: + break; + } + } else { + pausePlay(); + } + + } + + /** + * 璁剧疆鐢甸噺鍙樺寲 + */ + public void setBattery(int percent) { + int resourceId; + if (percent < 10) + resourceId = R.drawable.ic_battery_1; + else if (percent < 20) + resourceId = R.drawable.ic_battery_2; + else if (percent < 30) + resourceId = R.drawable.ic_battery_3; + else if (percent < 40) + resourceId = R.drawable.ic_battery_4; + else if (percent < 50) + resourceId = R.drawable.ic_battery_5; + else if (percent < 60) + resourceId = R.drawable.ic_battery_6; + else if (percent < 70) + resourceId = R.drawable.ic_battery_7; + else if (percent < 80) + resourceId = R.drawable.ic_battery_8; + else + resourceId = R.drawable.ic_battery_10; + iv_electric.setImageResource(resourceId); + } + private void showController() { if (!isLock()) { fl_bottom.setVisibility(View.VISIBLE); ll_top.setVisibility(View.VISIBLE); + iv_lock.setVisibility(View.VISIBLE); + EventBus.getDefault().post(new PlayerControllerShow(true)); + } else { + fl_bottom.setVisibility(View.GONE); + ll_top.setVisibility(View.GONE); + iv_lock.setVisibility(View.VISIBLE); } - iv_lock.setVisibility(View.VISIBLE); + delayHiddenController(); } private void hiddenController() { - fl_bottom.setVisibility(View.GONE); - ll_top.setVisibility(View.GONE); - iv_lock.setVisibility(View.GONE); + if (canHiddenController) { + if (definitionPopupWindow == null || !definitionPopupWindow.isShowing()) { + fl_bottom.setVisibility(View.GONE); + ll_top.setVisibility(View.GONE); + iv_lock.setVisibility(View.GONE); + EventBus.getDefault().post(new PlayerControllerShow(false)); + } + } + } + + private void delayHiddenController() { + fl_bottom.removeCallbacks(controllerHiddenRunnable); + fl_bottom.postDelayed(controllerHiddenRunnable, 4000); } private GestureDetector mGesde = new GestureDetector(new MSimpleGestureDectListener()); + + private VideoEpisodeDialog episodeDialog; + + private PopupWindow definitionPopupWindow; + + private Fragment fragment; + + SeekBar.OnSeekBarChangeListener seekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { + + boolean isTouch = false; + + @Override + public void onProgressChanged(SeekBar seekBar, int precent, boolean b) { + if (isTouch) { + //璁$畻 鎷栨媺鍚庣殑 鏃堕棿闀垮害锛� + int positionLong = mediaPlayer.getDuration() * seekBar.getProgress() / 1000; + mediaPlayer.seekTo(positionLong); + } + + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + isTouch = true; + mediaPlayer.pause(); + canHiddenController = false; + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + isTouch = false; + mediaPlayer.start(); + int currentPosition = getSeconds(mediaPlayer.getCurrentPosition()); + tv_progress.setText(TimeUtil.getTimeDesc(currentPosition)); + canHiddenController = true; + delayHiddenController(); + } + }; + /** * 鍒濆鍖� */ - public void build(Activity mActivity) { + public void build(final Activity mActivity, Fragment fragment) { this.mActivity = mActivity; + this.fragment = fragment; + setLayout(); + tv_title.setText(videoName); + tv_link.setText(videoUrl); + setCollect(this.collected); + + showLoading(); + + iv_back.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (videoPlayerListener != null) + videoPlayerListener.onBack(); + } + }); + + contentView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { @@ -126,76 +415,438 @@ return true; } }); - seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + seekBar.setOnSeekBarChangeListener(seekBarChangeListener); + aq.id(R.id.seekBar_portrait).getSeekBar().setOnSeekBarChangeListener(seekBarChangeListener); - boolean isTouch = false; - + iv_collection.setOnClickListener(new OnClickListener() { @Override - public void onProgressChanged(SeekBar seekBar, int precent, boolean b) { - if (isTouch) { - //璁$畻 鎷栨媺鍚庣殑 鏃堕棿闀垮害锛� - int positionLong = mediaPlayer.getDuration() * seekBar.getProgress() / 100; - mediaPlayer.seekTo(positionLong); + public void onClick(View v) { + if (videoPlayerListener != null) {//鏀惰棌 + videoPlayerListener.collect(!collected); } } - + }); + iv_download.setOnClickListener(new OnClickListener() { @Override - public void onStartTrackingTouch(SeekBar seekBar) { -// mHandler.removeMessages(0); -// isTouch = true; -// mediaPlayer.pause(); -// stop$play.setImageResource(R.mipmap.play_small); - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { -// if (controllerView.getVisibility() == View.VISIBLE) { -// if (mHandler != null) { -// mHandler.sendEmptyMessageDelayed(0, 4000); -// } -// } - isTouch = false; - mediaPlayer.start(); -// stop$play.setImageResource(R.mipmap.stop_small); + public void onClick(View v) { + Toast.makeText(getContext(), "鏆備笉鏀寔涓嬭浇", Toast.LENGTH_SHORT).show(); } }); + + iv_episode.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + //褰撳墠闆� + episodeDialog = new VideoEpisodeDialog.Builder().setEpisodes(episodeList, mPlayingPosition, 1).setDialogClick(new VideoEpisodeDialog.IDialogClick() { + @Override + public void selectEpisode(int p, VideoEpisode ve) { + if (videoPlayerListener != null) + videoPlayerListener.selectEpisode(p, ve); + if (episodeDialog.isShowing()) + episodeDialog.dismiss(); + } + + @Override + public void close() { + if (episodeDialog.isShowing()) + episodeDialog.dismiss(); + } + }).build(mActivity); + episodeDialog.show(); + hiddenController(); + } + }); + + + iv_play.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (mediaPlayer != null) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + VideoResourceUtil.setPlayImage(iv_play, true, isLand); + } else { + mediaPlayer.start(); + VideoResourceUtil.setPlayImage(iv_play, false, isLand); + } + } + } + }); + + definitionPopupWindow = null; + //娓呮櫚搴﹂�夋嫨 + tv_definition.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (definitionPopupWindow == null) { + definitionPopupWindow = new PopupWindow(getContext()); + } + if (definitionPopupWindow.isShowing()) + definitionPopupWindow.dismiss(); + else { + final View view = LayoutInflater.from(getContext()).inflate(R.layout.item_player_definition, null); + LinearLayout ll_container = view.findViewById(R.id.ll_container); + fillDefinition(ll_container); + + definitionPopupWindow.setContentView(view); + definitionPopupWindow.setOutsideTouchable(true); + definitionPopupWindow.setBackgroundDrawable(null); + definitionPopupWindow.setFocusable(true); + //闃叉鍐嶆寮瑰嚭 + definitionPopupWindow.setTouchInterceptor(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { + definitionPopupWindow.dismiss(); + return true; + } + return false; + } + }); + //娓呮櫚搴﹂�夋嫨娑堝け鍚庨渶瑕侀殣钘忔帶鍒跺眰 + definitionPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { + @Override + public void onDismiss() { + delayHiddenController(); + } + }); + + tv_definition.post(new Runnable() { + @Override + public void run() { + Log.i(TAG, String.format("width:%s height:%s", view.getWidth(), view.getHeight())); + //淇濆瓨anchor鍦ㄥ睆骞曚腑鐨勪綅缃� + int[] location = new int[2]; + //淇濆瓨anchor涓婇儴涓偣 + int[] anchorCenter = new int[2]; + //璇诲彇浣嶇疆anchor搴ф爣 + tv_definition.getLocationOnScreen(location); + //璁$畻anchor涓偣 + anchorCenter[0] = location[0] + tv_definition.getWidth() / 2 - DimenUtils.dip2px(getContext(), 60); + anchorCenter[1] = location[1] - videoDefinitionList.size() * DimenUtils.dip2px(getContext(), 28); + int xoff = 0; + int yoff = 0; + + definitionPopupWindow.showAtLocation(tv_definition, Gravity.TOP | Gravity.LEFT, anchorCenter[0] + xoff, anchorCenter[1] - (yoff)); + } + }); + + } + } + }); + + iv_lock.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (iv_lock.getTag() == null) { + iv_lock.setImageResource(R.drawable.ic_player_lock); + iv_lock.setTag("lock"); + showController(); + EventBus.getDefault().post(new PlayerLock(true)); + } else { + iv_lock.setTag(null); + iv_lock.setImageResource(R.drawable.ic_player_unlock); + showController(); + EventBus.getDefault().post(new PlayerLock(false)); + } + } + }); + + iv_next.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (videoPlayerListener != null) + videoPlayerListener.onNext(); + } + }); + + //缁х画鎾斁 + aq.id(R.id.iv_play_center).clicked(new OnClickListener() { + @Override + public void onClick(View v) { + continuePlay(); + } + }); + } - public void changeOrien(Activity activity) { -// boolean tag = requestOrien.getTag() == null ? false : (boolean) requestOrien.getTag(); -// activity.setRequestedOrientation(!tag ? ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); -// requestOrien.setTag(!tag); + private void fillDefinition(final LinearLayout ll_container) { + ll_container.removeAllViews(); + for (int i = 0; i < videoDefinitionList.size(); i++) { + final int p = i; + VideoDefinition vd = videoDefinitionList.get(i); + final VideoDefinition fvd = vd; + TextView tv = new TextView(getContext()); + ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(DimenUtils.dip2px(getContext(), 60), DimenUtils.dip2px(getContext(), 28)); + tv.setLayoutParams(params); + tv.setGravity(Gravity.CENTER); + tv.setTextSize(12); + tv.setTextColor(Color.WHITE); + tv.setText(vd.getName()); + tv.setBackgroundColor(Color.parseColor("#80000000")); + if (currentDefinition != null && currentDefinition.getName().equalsIgnoreCase(vd.getName())) { + tv.setTextColor(Color.parseColor("#FF078D")); + tv.setBackgroundColor(Color.parseColor("#800052F6")); + } + tv.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + currentDefinition = fvd; + tv_definition.setText("娓呮櫚搴︼細" + currentDefinition.getName()); + fillDefinition(ll_container); + videoPlayerListener.changeDefinition(p, currentDefinition); + if (definitionPopupWindow != null && definitionPopupWindow.isShowing()) + definitionPopupWindow.dismiss(); + } + }); + + ll_container.addView(tv); + } + } - //閿佸睆 - private void lock() { - hiddenController(); + private boolean isLand = false; + + /** + * 灞忓箷鏂瑰悜鏀瑰彉 + * + * @param land + */ + public void changeOrien(boolean land) { + if (isLand != land) { + //鏇存敼灞忓箷鏂瑰悜 + isLand = land; + setLayout(); + } } - //瑙i攣灞� - private void unLock() { - if (isLock()) - showController(); + private void setLayout() { + if (isLand) { + findViewById(R.id.fl_state).setVisibility(View.VISIBLE); +// if (iv_collection.getVisibility() == View.GONE) +// iv_collection.setVisibility(View.VISIBLE); + if (iv_download.getVisibility() == View.GONE) + iv_download.setVisibility(View.VISIBLE); +// if (iv_share.getVisibility() == View.GONE) +// iv_share.setVisibility(View.VISIBLE); + if (iv_episode.getVisibility() == View.GONE) + iv_episode.setVisibility(View.VISIBLE); + iv_full_screen.setVisibility(View.GONE); + if (this.currentDefinition != null) + tv_definition.setVisibility(View.VISIBLE); + tv_resource.setVisibility(View.VISIBLE); + iv_next.setVisibility(View.VISIBLE); + + aq.id(R.id.seekBar_portrait).visibility(View.GONE); + aq.id(R.id.seekBar).visibility(View.VISIBLE); + aq.id(R.id.view_bottom_fill).visibility(View.VISIBLE); + aq.id(R.id.tv_time_cutline).visibility(View.VISIBLE); + + seekBar.setProgress(aq.id(R.id.seekBar).getSeekBar().getProgress()); + } else { + findViewById(R.id.fl_state).setVisibility(View.GONE); + if (iv_collection.getVisibility() == View.VISIBLE) + iv_collection.setVisibility(View.GONE); + + if (iv_download.getVisibility() == View.VISIBLE) + iv_download.setVisibility(View.GONE); + + if (iv_share.getVisibility() == View.VISIBLE) + iv_share.setVisibility(View.GONE); + + if (iv_episode.getVisibility() == View.VISIBLE) + iv_episode.setVisibility(View.GONE); + + iv_full_screen.setVisibility(View.VISIBLE); + + tv_definition.setVisibility(View.GONE); + tv_resource.setVisibility(View.GONE); + iv_next.setVisibility(View.GONE); + + aq.id(R.id.seekBar_portrait).visibility(View.VISIBLE); + aq.id(R.id.seekBar).visibility(View.GONE); + aq.id(R.id.view_bottom_fill).visibility(View.GONE); + aq.id(R.id.tv_time_cutline).visibility(View.GONE); + + aq.id(R.id.seekBar).getSeekBar().setProgress(seekBar.getProgress()); + } + VideoResourceUtil.setPlayImage(iv_play, mediaPlayer != null ? mediaPlayer.isPlaying() : false, isLand); + } + + private int getSeconds(int ms) { + return Math.round(ms / 1000.0f); + } + + private Runnable playerProcessRunnable = new Runnable() { + @Override + public void run() { + //璁剧疆鏃堕棿 + if (mediaPlayer != null && mediaPlayer.isPlaying()) { + int currentPosition = getSeconds(mediaPlayer.getCurrentPosition()); + tv_progress.setText(TimeUtil.getTimeDesc(currentPosition)); + seekBar.setProgress(Math.round(mediaPlayer.getCurrentPosition() * 1000 / mediaPlayer.getDuration())); + setPlayerState(); + } + tv_progress.postDelayed(playerProcessRunnable, 1000); + } + }; + + private Runnable controllerHiddenRunnable = new Runnable() { + @Override + public void run() { + hiddenController(); + } + }; + + /** + * 瑙嗛鍑嗗濂界殑鍥炶皟 + * + * @param mp + */ + public void onPrepared(MediaPlayer mp) { + closeLoading(); + this.mediaPlayer = mp; + final int duration = getSeconds(mp.getDuration()); + Log.i(TAG, "瑙嗛鎬绘椂闀匡細" + duration); + if (mp != null) { + tv_duration.post(new Runnable() { + @Override + public void run() { + tv_duration.setText(TimeUtil.getTimeDesc(duration)); + } + }); + tv_progress.removeCallbacks(playerProcessRunnable); + tv_progress.post(playerProcessRunnable); + ConnectivityManager connectivityManager = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); + setNetworkInfo(networkInfo, true); + } + } + + /** + * 璁剧疆鎾斁鐘舵�� + */ + + private void setPlayerState() { + if (mediaPlayer != null) { + if (mediaPlayer.isPlaying()) { + VideoResourceUtil.setPlayImage(iv_play, false, isLand); + aq.id(R.id.iv_play_center).visibility(View.GONE); + } else { + VideoResourceUtil.setPlayImage(iv_play, true, isLand); + if (!isLand) { + aq.id(R.id.iv_play_center).visibility(View.VISIBLE); + } + } + } + } + + //鏆傚仠鎾斁 + private synchronized void pausePlay() { + if (mediaPlayer != null && mediaPlayer.isPlaying()) + mediaPlayer.pause(); + setPlayerState(); + + } + + private synchronized void continuePlay() { + if (mediaPlayer != null && !mediaPlayer.isPlaying()) + mediaPlayer.start(); + setPlayerState(); } - interface IVideoPlayerListener { - //鐐瑰嚮浜嗘殏鍋滄寜閽� - public void onPause(); + private boolean isLock() { + Object lock = iv_lock.getTag(); + if (lock != null) { + return true; + } else { + return false; + } + } + + private boolean isControllerShow() { + return iv_lock.getVisibility() == View.VISIBLE; + } + + final float FLIP_DISTANCE = 20; + + + /** + * 浜害璋冭妭 + * + * @param brightness + */ + public void setBrightness(float brightness) { + if (mActivity == null) + return; + WindowManager.LayoutParams lp = mActivity.getWindow().getAttributes(); + lp.screenBrightness = lp.screenBrightness + brightness / 255.0f; + if (lp.screenBrightness > 1) { + lp.screenBrightness = 1; + } else if (lp.screenBrightness < 0.05) { + lp.screenBrightness = (float) 0.05; + } + mActivity.getWindow().setAttributes(lp); + } + + /** + * 闊抽噺璋冭妭 + * + * @param volume + */ + public void setAudio(int volume) { + AudioManager audioManager = (AudioManager) getContext().getSystemService(AUDIO_SERVICE); + //褰撳墠闊抽噺 + int k = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); + //鏈�澶ч煶閲� + int max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + Log.d("==d==", "" + max); + Log.d("==d==", "" + k); + k = k + volume; + if (k >= 0 && k <= max) { + audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, k, AudioManager.FLAG_PLAY_SOUND); + } + } + + public synchronized void showLoading() { + aq.id(R.id.fl_loading).visibility(View.VISIBLE); + } + + public synchronized void closeLoading() { + aq.id(R.id.fl_loading).visibility(View.GONE); + } + + /** + * 閲婃斁璧勬簮 + */ + public void onDestory() { + if (timer != null) + timer.cancel(); + } + + + public interface IVideoPlayerListener { + //鏆傚仠 + public void onVideoPause(); + + //鎾斁 + public void onVideoPlay(); //涓嬩竴闆� public void onNext(); //杩斿洖 public void onBack(); - } - private boolean isLock() { - return false; - } + //閫夐泦 + public void selectEpisode(int p, VideoEpisode episode); - private boolean isControllerShow() { - return ll_top.getVisibility() == View.VISIBLE; + //鎼滆棌 + public void collect(boolean collect); + + //鍒囨崲娓呮櫚搴� + public void changeDefinition(int p, VideoDefinition definition); } //鎵嬪娍澶勭悊 @@ -213,9 +864,73 @@ } @Override + public boolean onDoubleTapEvent(MotionEvent e) { + + return true; + } + + @Override + public boolean onDoubleTap(MotionEvent e) { + if (mediaPlayer != null) { + if (mediaPlayer.isPlaying()) { + pausePlay(); + } else { + continuePlay(); + } + } + return true; + } + + @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { + Log.i(TAG, String.format("onScroll:璧峰鐐瑰潗鏍囷細%s,%s", e1.getX(), e1.getY())); Log.i(TAG, String.format("onScroll:distanceX=%s distanceY=%s", distanceX, distanceY)); - if (distanceX != 0) { + + if (Math.abs(distanceX) > FLIP_DISTANCE) {//妯悜婊戝姩 + if (distanceX < 0)//鍙虫粦 + { + Log.i(TAG, "鍙虫粦"); + } else {//宸︽粦 + Log.i(TAG, "宸︽粦"); + } + } else if (Math.abs(distanceY) > FLIP_DISTANCE) {//绔栧悜婊戝姩 + boolean left; + if (mActivity.getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {//妯睆 + if (e1.getX() < DimenUtils.getScreenHeight(mActivity) / 2) { + left = true; + } else { + left = false; + } + } else {//绔栧睆 + if (e1.getX() < DimenUtils.getScreenWidth(mActivity) / 2) { + left = true; + } else { + left = false; + } + } + + if (left) { + Log.i(TAG, "宸﹁竟"); + if (distanceY < 0)//涓嬫粦 + { + Log.i(TAG, "涓嬫粦"); + } else {//涓婃粦 + Log.i(TAG, "涓婃粦"); + } + //璋冭妭浜害 + setBrightness(distanceY); + } else { + Log.i(TAG, "鍙宠竟"); + if (distanceY < 0)//涓嬫粦 + { + Log.i(TAG, "涓嬫粦"); + } else {//涓婃粦 + Log.i(TAG, "涓婃粦"); + } + + //璋冭妭闊抽噺 + setAudio((int) distanceY / 50); + } } -- Gitblit v1.8.0