La versione completa della versione modificata di luigi23 ad evitare alcuni crash.
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
nulla sull'attività principale. si potrebbe desiderare di renderlo fullscreen aggiungendo
<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
Creare un file IntroVideoSurfaceView.java
import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.os.Build;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import java.io.IOException;
public class IntroVideoSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
private MediaPlayer mp;
private boolean has_started = false;
@TargetApi(Build.VERSION_CODES.LOLLIPOP) public IntroVideoSurfaceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
public IntroVideoSurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public IntroVideoSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public IntroVideoSurfaceView(Context context) {
super(context);
init();
}
private void init() {
mp = new MediaPlayer();
getHolder().addCallback(this);
}
@Override public void surfaceCreated(SurfaceHolder holder) {
AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.slideshow);
try {
if (!has_started) {
has_started = true;
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
}
mp.prepare();
android.view.ViewGroup.LayoutParams lp = getLayoutParams();
lp.height = getHeight();
lp.width = getWidth();
setLayoutParams(lp);
mp.setDisplay(getHolder());
mp.setLooping(true);
mp.start();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override public void surfaceDestroyed(SurfaceHolder holder) {
mp.stop();
}
}
aggiungere un "slideshow.mp4" di risorse/prime
modificare activity_main.xml con
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/home_container"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.androidadvance.videobackground.IntroVideoSurfaceView
android:id="@+id/surface"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Press Me"
android:id="@+id/button"
android:layout_gravity="center_horizontal|bottom"
android:layout_margin="16dp"
/>
</FrameLayout>
Alcune note.
Aggiunta di un video renderà il vostro apk enorme quindi si potrebbe voler evitare questo ... Di tanto in tanto si blocca sconosciuti si verificano anche su telefoni di fascia alta (Galaxy S6) E 'essenziale per mantenere il file di piccole dimensioni.
Esiste un modo ho potuto fare lo stesso da un servizio in background? Come creare un video player dal servizio? –
Che dire di 'TextureView'? @AndroSelva –
Questo non funziona per me, Spero che qualcuno abbia una soluzione migliore o un modo efficace per integrare un file video. – XcodeNOOB