Android Studio 如何实现视频图片轮播

本人用的android studio3.6版本。

res/layout的XML文件

<?xml version="1.0" encoding="utf-8"?>"http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/RelativeLayout"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:gravity="center"    tools:context=".MainActivity">    "@+id/imgchange"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:visibility="visible"        />    "@+id/videoView"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:visibility="gone"/></RelativeLayout>

在res/drawable中添加图片

在res中加入raw Folder后再res/raw中加入视频文件。

在mainActivity中

package com.example.handlertest;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import android.media.MediaPlayer;import android.net.Uri;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.view.Window;import android.widget.ImageView;import android.widget.VideoView;import java.net.URI;import java.util.Timer;import java.util.TimerTask;public class MainActivity extends AppCompatActivity {    public static final int PIC = 0;    public static final int VID = 1;    private static int start = 0;    private ImageView imgchange;    private VideoView videoView;    private TimerTask task;    private Timer timer= new Timer();    private int Flag;    int[] resourceIDs = {R.drawable.a,R.drawable.b,R.raw.r,            R.raw.x,R.drawable.c};     int[] resType={0,0,1,1,0};//0为图片,1为视频    Handler mHandler = new Handler(){        @Override        public void handleMessage(@NonNull Message msg) {            super.handleMessage(msg);            //接收消息            Log.d("看看msg.what=",String.valueOf(msg.what));            switch (msg.what){                case PIC:                        Log.d("图片数据开始", String.valueOf(start));                        imgchange.setVisibility(View.VISIBLE);                        videoView.setVisibility(View.GONE);                        imgchange.setImageResource(resourceIDs[start]);                        start = (start+1)%5;                        Log.d("图片数据结束", String.valueOf(start));                        Flag=resType[start];                    break;                case VID:                        imgchange.setVisibility(View.GONE);                        videoView.setVisibility(View.VISIBLE);                        Log.d("视频数据开始", String.valueOf(start));                        Flag = 2;////首先要将这个标签换掉 不然会出现因为定时器的原因导致视频播放不全的问题。                        String uri = "android.resource://" + getPackageName() + "/" + resourceIDs[start];                        start=(start+1)%5;                        videoView.setVideoURI(Uri.parse(uri));                        //开始播放                        videoView.start();                        //播放完成回调                        videoView.setOnCompletionListener(new MyPlayerOnCompletionListener());                        //防止出现视频播放错误的问题                        videoView.setOnErrorListener(videoErrorListener);                    break;                default:                    break;            }        }    };    //防出现无法播放此视频窗口    public MediaPlayer.OnErrorListener videoErrorListener = new MediaPlayer.OnErrorListener() {        @Override        public boolean onError(MediaPlayer mp, int what, int extra) {            return true;        }    };    //回调方法    private class MyPlayerOnCompletionListener implements MediaPlayer.OnCompletionListener {        @Override        public void onCompletion(MediaPlayer mp) {            /**再次启动图片的轮播,设置了imgstart为初始值*/            /**多个视频可以在这进行切换,进行一次判断加入还有视频就播放,没有就走下面这一段*/            Flag=0;            Log.d("图片数据结束", String.valueOf(start));            task.cancel();            startTask();        }    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if(getSupportActionBar()!=null)            getSupportActionBar().hide();        setContentView(R.layout.activity_main);        imgchange = findViewById(R.id.imgchange);        videoView = findViewById(R.id.videoView);        startTask();    }    public void startTask(){            task = new TimerTask() {                @Override                public void run() {                    Message msg = Message.obtain();                    if (Flag == PIC) {                        Log.d("在run1中的MEG.WHAT=",String.valueOf(msg.what));                        msg.what = resType[start];                        mHandler.sendMessage(msg);                    }else if (Flag==VID){                        msg.what=resType[start];                        mHandler.sendMessage(msg);                    } else {                        Log.d("run3中的meg.what=",String.valueOf(msg.what));                        mHandler.sendEmptyMessage(Flag);                    }                }            };        //定时器开始执行        timer.schedule(task,0,20000);    }}

更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android(安卓)启动 Activity和一键退出应用的的最佳方法
  5. Glide框架V3版本和V4版本区别
  6. android 网络编程--URL获取数据/图片
  7. Android开发中常用的数据存储
  8. 三种自定义漂亮的Android(安卓)SeekBar的方法
  9. android 5.0 修改默认壁纸

随机推荐

  1. Android(安卓)SDK R11 下载地址
  2. Android7.0中文API -- AbsSpinner
  3. Android深色模式适配-想法1.0
  4. 关于Android相对布局中的四个属性:layout
  5. Android(安卓)热修复方案Tinker(五) SO补
  6. Android(安卓)热修复方案Tinker(二) 补丁
  7. android文字阴影效果
  8. Android——android:gravity 和 android:
  9. Android(安卓)热修复方案Tinker(三) Dex
  10. Android数据加密之Des加密