Control deslizante de imagen y vídeo en Android

Estoy creando una aplicación para Android con un diseño heterogéneo.

La aplicación tiene una página de inicio de sesión donde el usuario inicia sesión ingresando su clave de licencia. Después de que el inicio de sesión se verifica, el usuario cambia a la siguiente pantalla.

En la siguiente pantalla hemos mostrado un control deslizante.

El problema es que queremos mostrar imágenes y videos en un solo control deslizante. Por lo tanto, después de la imagen de un video puede ocurrir o después de algunas imágenes de un video accour.

Ahora el verdadero problema es que el control deslizante omite todas las imágenes y muestra sólo el video.

Queremos mostrar la imagen para un intervalo de 3 segundos y si un video viene, entonces debe detener el control deslizante y reproducir todo el vídeo y luego proceder a la siguiente diapositiva.

A continuación se muestra nuestro código para la aplicación que estamos creando.

package com.cd.layout; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Timer; import java.util.TimerTask; import android.annotation.SuppressLint; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.StrictMode; import android.util.Log; import android.view.View; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.MediaController; import android.widget.RelativeLayout; @SuppressLint("NewApi") public class MainActivity extends Activity { private static final int BUTTON_5 = 5; List<String> image_ext = Arrays.asList("png","jpeg"); List<String> video_ext = Arrays.asList("wmv","mp4"); private int region = 1; Bitmap bm; String [] splits; String [] media ; ArrayList<String> media_path = new ArrayList<String>(); ArrayList<String> media_path1 = new ArrayList<String>(); ArrayList<String> media_type = new ArrayList<String>(); ArrayList<String> duration = new ArrayList<String>(); int p = 0 ; String media_info [] = null; String response_data = null; int count = 0; int i = 0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); generateView(); } public static Bitmap loadBitmap(String URL, BitmapFactory.Options options) { Bitmap bitmap = null; InputStream in = null; try { in = OpenHttpConnection(URL); bitmap = BitmapFactory.decodeStream(in, null, options); Log.i("bitmap",bitmap.toString()); in.close(); } catch (IOException e1) { } return bitmap; } private static InputStream OpenHttpConnection(String strURL) throws IOException { InputStream inputStream = null; URL url = new URL(strURL); URLConnection conn = url.openConnection(); try { HttpURLConnection httpConn = (HttpURLConnection)conn; httpConn.setRequestMethod("GET"); httpConn.connect(); if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) { inputStream = httpConn.getInputStream(); } } catch (Exception ex) { } return inputStream; } private void generateView() { final CompositeView View7 = new CompositeView(this); StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() .permitAll().build(); StrictMode.setThreadPolicy(policy); final BitmapFactory.Options bmOptions; bmOptions = new BitmapFactory.Options(); final MediaController mediaController = new MediaController(this); bmOptions.inSampleSize = 1; if(region>0) //images/upload/videos/VID-20140111-WA0002.mp4=mp4=00:00:00 { response_data = "images/upload/images/Penguins.jpg=jpeg=00:00:05,images/upload/images/Jellyfish.jpg=jpeg=00:00:05,images/upload/videos/VID-20140111-WA0002.mp4=mp4=00:00:00"; media = response_data.split(","); for(String s : media) { media_info = s.split("="); media_path.add(media_info[0]); media_type.add(media_info[1]); duration.add(media_info[2]); } for(p = 0 ; p<=media_type.size()-1; p++) { if(image_ext.contains(media_type.get(p))) { View7.getImageView().invalidate(); View7.getImageView().setVisibility(View.VISIBLE); View7.getVideoView().setVisibility(View.GONE); String url = "http://test.com/".concat(media_path.get(p)); //we have removed the live site URL which fetched the video and images and entered the dummy link Log.i("Image Name",url); final Bitmap bm = loadBitmap(url, bmOptions); new Handler().postDelayed(new Runnable() { @Override public void run() { View7.getImageView().setImageBitmap(bm); View7.setId(BUTTON_5); } }, 50000); View7.getImageView().setImageBitmap(bm); View7.setId(BUTTON_5); } else { if(video_ext.contains(media_type.get(p))) { View7.getVideoView().invalidate(); View7.getVideoView().setVisibility(View.VISIBLE); View7.getImageView().setVisibility(View.GONE); String videoToPlay = "http://test.com/".concat(media_path.get(p)); //we have removed the live site URL which fetched the video and images and entered the dummy link Log.i("Image Name",videoToPlay); View7.getVideoView().setVideoURI(Uri.parse(videoToPlay)); View7.getVideoView().setMediaController(new MediaController(this)); View7.getVideoView().setFocusable(true); View7.getVideoView().start(); } } } region --; } final RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.main_layout); ViewTreeObserver vto = mainLayout.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @SuppressWarnings("deprecation") @Override public void onGlobalLayout() { final int oneUnitWidth = mainLayout.getMeasuredWidth() / 8; final int oneUnitHeight = mainLayout.getMeasuredHeight() / 4; String str = "348:243:320:240:"; splits = str.split(":"); count = splits.length; if(count!=0) { final RelativeLayout.LayoutParams weatherParams = new RelativeLayout.LayoutParams( Integer.parseInt(splits[i]), Integer.parseInt(splits[i+1])); weatherParams.setMargins(0, 2, 0, 2); View7.setLayoutParams(weatherParams); count = count - 2; i = i + 2; } else { final RelativeLayout.LayoutParams weatherParams = new RelativeLayout.LayoutParams( 320, 240); weatherParams.setMargins(0, 2, 0, 2); View7.setLayoutParams(weatherParams); } ViewTreeObserver obs = mainLayout.getViewTreeObserver(); obs.removeGlobalOnLayoutListener(this); } }); mainLayout.addView(View7); } } 

Cualquier ayuda es apreciada ..!

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.