Langage : Java
 Édité le 26 juillet 2021
Télécharger | Reposter
package com.armdev.DemoPlayer.activity; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.graphics.Point; import android.media.MediaPlayer; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.util.DisplayMetrics; import android.view.Display; import android.view.MotionEvent; import android.view.ScaleGestureDetector; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; import android.widget.VideoView; import androidx.appcompat.app.AppCompatActivity; import androidx.core.view.GestureDetectorCompat; import com.armdev.DemoPlayer.adapter.VideosAdapter; import com.armdev.advid.R; public class VideoPlayer extends AppCompatActivity implements View.OnTouchListener, ScaleGestureDetector.OnScaleGestureListener, View.OnClickListener { RelativeLayout zoomLayout; ScaleGestureDetector scaleDetector; GestureDetectorCompat gestureDetector; private static final float MIN_ZOOM = 1.0f; private static final float MAX_ZOOM = 5.0f; boolean intLeft, intRight; private Display display; private Point size; int clickCount = 0; private Mode mode = Mode.NONE; private enum Mode { NONE, DRAG, ZOOM; } int device_width; private int sWidth; int screenWidth, screenHeight; int index = 1; private boolean isEnable = true; private boolean isOpen = true; private float scale = 1.0f; private float lastScaleFactor = 0f; // Where the finger first touches the screen private float startX = 0f; private float startY = 0f; // How much to translate the canvas private float dx = 0f; private float dy = 0f; private float prevDx = 0f; private float prevDy = 0f; android.widget.RelativeLayout.LayoutParams initialParams; android.view.ViewGroup.LayoutParams lp; int position = -1; private VideoView videoView; private VideoView videoView2; LinearLayout one, two , three , four, five, lockControls, unlockControls, rotate, etirer; ImageButton goBack, rewind, forward, playPause; TextView title, endTime, lockTextOne, lockTextTwo; SeekBar videoSeekBar; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction() & MotionEvent.ACTION_MASK){ case MotionEvent.ACTION_DOWN: hideDefaultControls(); if (scale > MIN_ZOOM) { mode = Mode.DRAG; startX = event.getX() - prevDx; startY = event.getY() - prevDy; } break; case MotionEvent.ACTION_MOVE: hideDefaultControls(); isEnable = false; if (mode == Mode.DRAG) { dx = event.getX() - startX; dy = event.getY() - startY; } break; case MotionEvent.ACTION_POINTER_DOWN: mode = Mode.ZOOM; break; case MotionEvent.ACTION_POINTER_UP: mode = Mode.DRAG; break; case MotionEvent.ACTION_UP: mode = Mode.NONE; prevDx = dx; prevDy = dy; break; } scaleDetector.onTouchEvent(event); gestureDetector.onTouchEvent(event); if ((mode == Mode.DRAG && scale >= MIN_ZOOM) || mode == Mode.ZOOM) { zoomLayout.requestDisallowInterceptTouchEvent(true); float maxDx = (child().getWidth() - (child().getWidth() / scale)) / 2 * scale; float maxDy = (child().getHeight() - (child().getHeight() / scale)) / 2 * scale; dx = Math.min(Math.max(dx, -maxDx), maxDx); dy = Math.min(Math.max(dy, -maxDy), maxDy); applyScaleAndTranslation(); } return true; } private void applyScaleAndTranslation() { child().setScaleX(scale); child().setScaleY(scale); child().setTranslationX(dx); child().setTranslationY(dy); } private View child() { return zoomLayout(0); } private View zoomLayout(int i) { return videoView; } @Override public boolean onScale(ScaleGestureDetector detector) { float scaleFactor = scaleDetector.getScaleFactor(); if (lastScaleFactor == 0 || (Math.signum(scaleFactor) == Math.signum(lastScaleFactor))) { scale *= scaleFactor; scale = Math.max(MIN_ZOOM, Math.min(scale, MAX_ZOOM)); lastScaleFactor = scaleFactor; } else { lastScaleFactor = 0; } return true; } @Override public boolean onScaleBegin(ScaleGestureDetector detector) { return true; } @Override public void onScaleEnd(ScaleGestureDetector detector) { } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video_player); /*Assigning Variables*/ videoView = findViewById(R.id.video_view); videoView2 = findViewById(R.id.video_view2); one = findViewById(R.id.videoView_one_layout); two = findViewById(R.id.videoView_two_layout); three = findViewById(R.id.videoView_three_layout); four = findViewById(R.id.videoView_four_layout); goBack = findViewById(R.id.videoView_go_back); title = findViewById(R.id.videoView_title); rewind = findViewById(R.id.videoView_rewind); playPause = findViewById(R.id.videoView_play_pause_btn); forward = findViewById(R.id.videoView_forward); endTime = findViewById(R.id.videoView_endtime); videoSeekBar = findViewById(R.id.videoView_seekbar); lockControls = findViewById(R.id.videoView_lock_screen); five = findViewById(R.id.video_five_layout); unlockControls = findViewById(R.id.video_five_child_layout); lockTextOne = findViewById(R.id.videoView_lock_text); lockTextTwo = findViewById(R.id.videoView_lock_text_two); rotate = findViewById(R.id.videoView_rotation); etirer = findViewById(R.id.videoView_track); /*Adding onClickListener*/ goBack.setOnClickListener(this); rewind.setOnClickListener(this); playPause.setOnClickListener(this); forward.setOnClickListener(this); lockControls.setOnClickListener(this); five.setOnClickListener(this); unlockControls.setOnClickListener(this); rotate.setOnClickListener(this); etirer.setOnClickListener(this); /*getting path and preparing for play video*/ position = getIntent().getIntExtra("p", -1); title.setText(VideosAdapter.videoFolder.get(position).getTitle()); String path = VideosAdapter.videoFolder.get(position).getPath(); if (path!=null){ videoView.setVideoPath(path); videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { videoSeekBar.setMax(videoView.getDuration()); prochaineVid(); } }); }else { Toast.makeText(this, "path didn't exits", Toast.LENGTH_SHORT).show(); } /*zoom in,out and double tap to go forward,backward * and single tap to hide and show controls */ zoomLayout = findViewById(R.id.zoom_layout); display = getWindowManager().getDefaultDisplay(); size = new Point(); display.getSize(size); sWidth = size.x; DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); device_width = displayMetrics.widthPixels; zoomLayout.setOnTouchListener(this); scaleDetector = new ScaleGestureDetector(getApplicationContext(), this); gestureDetector = new GestureDetectorCompat(getApplicationContext(), new GestureDetector()); setHandler(); initalizeSeekBars(); DisplayMetrics metrics1 = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics1); initialParams = (android.widget.RelativeLayout.LayoutParams) videoView.getLayoutParams(); DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); android.widget.RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) videoView2.getLayoutParams(); params.width = metrics.widthPixels; params.height = metrics.heightPixels; params.leftMargin = 0; params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); videoView.setLayoutParams(params); final Handler handler = new Handler(Looper.getMainLooper()); handler.postDelayed(new Runnable() { @Override public void run() { hideDefaultControls(); } }, 3000); } private void prochaineVid(){ videoView.start(); videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { public void onCompletion(MediaPlayer mp) { if (index < VideosAdapter.videoFolder.size()){ position = getIntent().getIntExtra("p", -1); String path2 = VideosAdapter.videoFolder.get(position + index).getPath(); videoView.setVideoPath(path2); prochaineVid(); index ++; }else{ index = index - VideosAdapter.videoFolder.size() ; position = getIntent().getIntExtra("p", -1); String path2 = VideosAdapter.videoFolder.get(position + index).getPath(); index ++; videoView.setVideoPath(path2); prochaineVid(); } } }); } private void initalizeSeekBars(){ videoSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (videoSeekBar.getId() == R.id.videoView_seekbar) { if (fromUser) { videoView.seekTo(progress); prochaineVid(); int currentPosition = videoView.getCurrentPosition(); endTime.setText("" + convertIntoTime(videoView.getDuration() - currentPosition)); } } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); } private String convertIntoTime(int ms){ String time; int x, seconds, minutes, hours; x = ms / 1000; seconds = x % 60; x /= 60; minutes = x % 60; x /= 60; hours = x % 24; if (hours != 0) time = String.format("%02d", hours) + ":" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds); else time = String.format("%02d", minutes) + ":" + String.format("%02d", seconds); return time; } private void setHandler(){ Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { if (videoView.getDuration()>0){ int currentPosition = videoView.getCurrentPosition(); videoSeekBar.setProgress(currentPosition); endTime.setText(""+convertIntoTime(videoView.getDuration()-currentPosition)); } handler.postDelayed(this,0); } }; handler.postDelayed(runnable,500); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.videoView_rotation: int orientation = getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_PORTRAIT){ //set in landscape setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }else if (orientation == Configuration.ORIENTATION_LANDSCAPE){ //set in portrait setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } break; case R.id.videoView_lock_screen: hideDefaultControls(); five.setVisibility(View.VISIBLE); final Handler handler = new Handler(Looper.getMainLooper()); handler.postDelayed(new Runnable() { @Override public void run() { unlockControls.setVisibility(View.INVISIBLE); lockTextOne.setVisibility(View.INVISIBLE); lockTextTwo.setVisibility(View.INVISIBLE); } }, 3000); break; case R.id.video_five_layout: if (isOpen){ unlockControls.setVisibility(View.INVISIBLE); lockTextOne.setVisibility(View.INVISIBLE); lockTextTwo.setVisibility(View.INVISIBLE); isOpen = false; }else { unlockControls.setVisibility(View.VISIBLE); lockTextOne.setVisibility(View.VISIBLE); lockTextTwo.setVisibility(View.VISIBLE); final Handler handler2 = new Handler(Looper.getMainLooper()); handler2.postDelayed(new Runnable() { @Override public void run() { unlockControls.setVisibility(View.INVISIBLE); lockTextOne.setVisibility(View.INVISIBLE); lockTextTwo.setVisibility(View.INVISIBLE); isOpen = false; } }, 3000); } break; case R.id.video_five_child_layout: five.setVisibility(View.GONE); showDefaultControls(); final Handler handler2 = new Handler(Looper.getMainLooper()); handler2.postDelayed(new Runnable() { @Override public void run() { hideDefaultControls(); } }, 3000); break; case R.id.videoView_go_back: onBackPressed(); break; case R.id.videoView_rewind: //1000 = 1sec videoView.seekTo(videoView.getCurrentPosition() -10000); break; case R.id.videoView_forward: //1000 = 1sec videoView.seekTo(videoView.getCurrentPosition() +10000); break; case R.id.videoView_play_pause_btn: if (videoView.isPlaying()){ videoView.pause(); playPause.setImageDrawable(getResources().getDrawable(R.drawable.ic_baseline_play_arrow_24)); }else { prochaineVid(); playPause.setImageDrawable(getResources().getDrawable(R.drawable.netflix_pause_button)); } break; case R.id.videoView_track: if (clickCount==0){ initialParams.alignWithParent = true; videoView.setLayoutParams(initialParams); clickCount=1; } else if (clickCount==1){ DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); android.widget.RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) videoView2.getLayoutParams(); params.width = metrics.widthPixels; params.height = metrics.heightPixels; params.leftMargin = 0; params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); videoView.setLayoutParams(params); clickCount=0; } break; } } public void getDeviceWidthAndHeight(){ lp = videoView.getLayoutParams(); screenWidth = getWindowManager().getDefaultDisplay().getWidth(); screenHeight = getWindowManager().getDefaultDisplay().getHeight(); } private class GestureDetector extends android.view.GestureDetector.SimpleOnGestureListener{ @Override public boolean onSingleTapConfirmed(MotionEvent e) { if (isEnable){ hideDefaultControls(); isEnable = false; }else { showDefaultControls(); isEnable = true; final Handler handler = new Handler(Looper.getMainLooper()); handler.postDelayed(new Runnable() { @Override public void run() { hideDefaultControls(); } }, 3000); } return super.onSingleTapConfirmed(e); } @Override public boolean onDoubleTap(MotionEvent event) { if (event.getX() < (sWidth / 2)) { intLeft = true; intRight = false; videoView.seekTo(videoView.getCurrentPosition() - 20000); Toast.makeText(VideoPlayer.this, "-20sec", Toast.LENGTH_SHORT).show(); } else if (event.getX() > (sWidth / 2)) { intLeft = false; intRight = true; videoView.seekTo(videoView.getCurrentPosition() + 20000); Toast.makeText(VideoPlayer.this, "+20sec", Toast.LENGTH_SHORT).show(); } return super.onDoubleTap(event); } } private void hideDefaultControls(){ one.setVisibility(View.GONE); two.setVisibility(View.GONE); three.setVisibility(View.GONE); four.setVisibility(View.GONE); //Todo this function will hide status and navigation when we click on screen final Window window = this.getWindow(); if (window == null){ return; } window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); final View decorView = window.getDecorView(); if (decorView!=null){ int uiOption = decorView.getSystemUiVisibility(); if (Build.VERSION.SDK_INT >= 14) { uiOption |= View.SYSTEM_UI_FLAG_LOW_PROFILE; } if (Build.VERSION.SDK_INT >= 16) { uiOption |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; } if (Build.VERSION.SDK_INT >= 19) { uiOption |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; } decorView.setSystemUiVisibility(uiOption); } } private void showDefaultControls(){ one.setVisibility(View.VISIBLE); two.setVisibility(View.VISIBLE); three.setVisibility(View.VISIBLE); four.setVisibility(View.VISIBLE); //todo this function will show status and navigation when we click on screen final Window window = this.getWindow(); if (window == null){ return; } window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); window.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); final View decorView = window.getDecorView(); if (decorView!=null){ int uiOption = decorView.getSystemUiVisibility(); if (Build.VERSION.SDK_INT >= 14) { uiOption &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; } if (Build.VERSION.SDK_INT >= 16) { uiOption &= ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; } if (Build.VERSION.SDK_INT >= 19) { uiOption &= ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; } decorView.setSystemUiVisibility(uiOption); } } @Override public void onBackPressed() { super.onBackPressed(); } }
x
Éditer le texte

Merci d'entrer le mot de passe que vous avez indiqué à la création du texte.

x
Télécharger le texte

Merci de choisir le format du fichier à télécharger.