android studio实现视频图片轮播功能
16lz
2021-01-25
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); }}
更多相关文章
- “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
- Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
- Android(安卓)启动 Activity和一键退出应用的的最佳方法
- Glide框架V3版本和V4版本区别
- android 网络编程--URL获取数据/图片
- Android开发中常用的数据存储
- 三种自定义漂亮的Android(安卓)SeekBar的方法
- android 5.0 修改默认壁纸