import android.media.MediaMetadataRetriever;
import android.os.Looper;
import android.app.Activity;
import android.view.ViewGroup;
import android.view.View;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
import android.content.res.Resources;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.content.Context;
import java.util.concurrent.TimeUnit;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.TextView;
import android.app.Activity;
import android.content.Context;
import android.widget.FrameLayout;
import android.view.ViewGroup.LayoutParams;
import android.view.Gravity;
import android.R;
import android.widget.RelativeLayout;
import processing.android.CompatUtils;
import android.graphics.Color;
import android.content.DialogInterface;
import android.app.Activity;
import android.app.AlertDialog;
import android.widget.SeekBar;
import android.graphics.Color;
import android.view.View;
import android.widget.TextView;
import android.view.Gravity;
import android.widget.LinearLayout;
import android.view.WindowManager;
import android.media.MediaPlayer;
import android.content.res.AssetFileDescriptor;
import android.content.Context;
import android.app.Activity;
int t, video_x, video_y, video_width, video_height, video_w, video_h;
int[] bx_val;
String video_title;
String[] txt = {"Play", "Pause", "Rewind"};
float duration, slider_length, slider_x, slider_y, bw, bs, bys;
double mp_current_position;
boolean on_start = true;
color bg, bc, ds, glow;
AssetFileDescriptor afd;
Context context;
Activity act;
SurfaceView mySurface;
SurfaceHolder mSurfaceHolder;
MediaMetadataRetriever metaRetriever;
PopupMenu popupMenu;
MediaPlayer mp;
Slider slider;
void setup() {
orientation(LANDSCAPE); // Colors
bg = color(255, 165, 0); // background
ds = color(50, 50, 0); // dark stroke
glow = color(0, 220, 220);// slider button
bc = color(255, 100, 0); // button
background(bg); // Video values
video_title = "m.mp4"; // video in data folder
video_width = width; // Set here desired width because video is resized/fit into these values.
video_height = height; // Desired height
video_x = (displayWidth-video_width)/2;
video_y = (displayHeight-video_height)/4;
slider_length = video_width;
slider_x = (width - slider_length)/2;
slider_y = video_y+video_height+height/20;
slider = new Slider(slider_x, slider_y, slider_length);
slider.update(); // Draw the buttons
textSize(28*displayDensity*1200/height);
stroke(ds);
strokeWeight(3);
bx_val = new int[3]; // x value array of each button, used in mousePressed()
for (int i = 0; i < 3; i++) {
bs = slider_length/12; // Space between buttons
bw = 5*slider_length/6/3; // Button width
float xu = i*(bw+bs)+slider_x;
bx_val[i] = int(xu); // Store button x values
fill(bc);
bys = video_y+video_height; // Button y values start
rect(xu, bys+height/9, bw, height/30, 12);
fill(ds);
text(txt[i], xu+width/30, bys+height/7.4);
}
initVideo(); // Draw video time lenght digits
textSize(24*displayDensity*1200/height);
String str = String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes((long) duration), TimeUnit.MILLISECONDS.toSeconds((long) duration) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) duration)));
text(str, slider_x+slider_length-textWidth(str), video_y+video_height+height/30);
displayTime();
}
void draw() {
mp.start();
if (on_start) { // Necessary to set first frame
mp_current_position = mp.getCurrentPosition();
if (mp_current_position > 2) {
on_start = false;
mp.pause();
}
}
if (mousePressed) {
mp_current_position = mp.getCurrentPosition();
if (mouseX >= slider_x && mouseX <= slider_x+slider_length) {
if (mouseY >= slider_y-height/30 && mouseY <= slider_y+height/30) {
slider.update();
}
}
}
if (mp.isPlaying()) {
mp_current_position = mp.getCurrentPosition();
displayTime();
slider.setPosition(mp_current_position); // Will be mapped there
}
}
void displayTime() { // The current video positioning time
textSize(24*displayDensity*1200/height);
String str = String.format("%d min, %d sec", TimeUnit.MILLISECONDS.toMinutes((long) mp_current_position), TimeUnit.MILLISECONDS.toSeconds((long) mp_current_position) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) mp_current_position)));
fill(bg);
noStroke();
float th = textAscent()+textDescent();
rect(slider_x-15, video_y+video_height+20, textWidth(str)+30, th);
fill(ds);
text(str, slider_x, video_y+video_height+height/30);
}
void settings() {
fullScreen ();
}
void mousePressed() {
for (int i = 0; i < 3; i++) {
if (mouseX > bx_val[i] && mouseX < bx_val[i]+bw+bs && mouseY > bys+height/9 && mouseY < bys+height/9+height/30) {
switch(i) {
case 0:
if (mp.isPlaying() == false) mp.start();
break;
case 1:
if (mp.isPlaying() == true) mp.pause();
break;
case 2:
mp.pause();
slider.setPosition(slider_x);
mp.seekTo(0);
break;
}
}
}
}
public class Slider {
float slider_x, slider_y, slider_length, slider_position;
Slider(float _x, float _y, float _l) {
slider_x = _x;
slider_y = _y;
slider_length = _l;
}
void update() {
float sp = map(mouseX-slider_x, 0.0, slider_length, 0.0, duration);
if (!on_start) mp.seekTo(int(sp));
drawSlider();
float loc = mouseX;
if (on_start) loc = slider_x;
ellipse(loc, slider_y+3, 25, 25);
}
void setPosition(double mp_current_position) {
drawSlider();
slider_position = map((float)mp_current_position, 0.0, duration, 0.0, slider_length-1);
ellipse(slider_x+slider_position, slider_y+3, 25, 25);
}
void drawSlider() {
fill(bg);
noStroke();
rect(slider_x-15, slider_y-15, slider_length+40, 40); // Erase background
fill(ds);
rect(slider_x, slider_y, slider_length, 5);
strokeWeight(3);
stroke(glow);
}
float getVal() {
return slider_position;
}
}
void initVideo() {
act = this.getActivity();
context = act.getApplicationContext();
Looper.prepare();
mp = new MediaPlayer();
try {
afd = context.getAssets().openFd(video_title);
MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
metaRetriever.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
String h = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
String w = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
video_w = int(w);
video_h = int(h);
println("Original video height = "+h+" width = "+w);
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mp.prepare();
duration = mp.getDuration();
println("length = "+afd.getLength());
println("duration = "+mp.getDuration());
println("startOffset = "+afd.getStartOffset() );
}
catch (IOException e) {
e.printStackTrace();
}
mySurface = new SurfaceView(act);
mSurfaceHolder = mySurface.getHolder();
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mSurfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override public void surfaceCreated(SurfaceHolder surfaceHolder) {
mp.setDisplay(surfaceHolder);
println("Surface created");
}
@Override public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i2, int i3) {
mp.setDisplay(surfaceHolder);
println("Surface changed");
}
@Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
println("Surface destroid");
}
}
);
act.runOnUiThread(new Runnable() {
public void run() {
mSurfaceHolder = mySurface.getHolder();
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
act.addContentView(mySurface, new ViewGroup.LayoutParams(video_width, video_height));
mySurface.setZOrderOnTop(true);
mySurface.setX(video_x);
mySurface.setY(video_y);
}
}
);
}
void onStop() {
if (mp!=null) {
mp.release();
mp = null;
println ("Stopped");
}
super.onStop() ;
}
Can i add a Pop-up Menu die select a movie?