android 视频和图片切换并进行自动轮播
16lz
2021-01-26
刚入android没多久,遇到的比较郁闷的问题就是子线程主线程的问题,更改UI界面,本想做一个图片的轮播但是比较简单,然后就试试实现视频跟图片切换播放进行不停的循环播放。也用过不少控件,但是知其然不知其所以然,后来自己写了一段来实现图片视频互相切换轮播。在这写下一篇博客也当自己学习的过程.希望大家多多指教希望
下面代码:
xml
<?xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/RelativeLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" tools:context="com.lishu.handler.MainActivity" > android:id="@+id/imgchange" android:layout_width="500px" android:layout_height="500px" /> android:id="@+id/videoView" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone"/>
在android5.1版本中会出现一定的错误。
07-27 03:08:58.413 3450-3475/? A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xe0 in tid 3475 (Binder_2)
07-27 03:08:59.537 3528-3546/? A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xe0 in tid 3546 (Binder_2)
[ 07-27 03:08:59.540 1166: 1166 E/ ]
invalid crash request of size 0 (from pid=3528 uid=0)
而在android高级一点的版本就没有这个问题 。也不知道是什么情况。。。 此贴算是抛砖引玉贴。
MainActivity.java
package com.lishu.handler;import android.app.Activity;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.widget.ImageView;import android.widget.VideoView;import java.util.Timer;import java.util.TimerTask;import static android.content.ContentValues.TAG;public class MainActivity extends Activity { private ImageView imgchange; private Timer timer = new Timer(); private TimerTask task; private VideoView videoView; private int flag = 0; //定义切换的图片的数组id int imgids[] = new int[]{R.drawable.one, R.drawable.two, R.drawable.three, R.drawable.four, R.drawable.five,}; int imgstart = 0; private Handler myHandler = new Handler() { @Override //重写handleMessage方法,根据msg中what的值判断是否执行后续操作 public void handleMessage(Message msg) { if (msg.what == 0) { Log.d("数据", String.valueOf(imgstart)); imgchange.setImageResource(imgids[imgstart++]); }else if(msg.what == 1){ flag = 2;//首先要将这个标签换掉 不然会出现因为定时器的原因导致视频播放不全的问题。 Log.d("测试", String.valueOf(flag)); imgchange.setVisibility(View.GONE); videoView.setVisibility(View.VISIBLE); initData();//播放视频的方法 }else{ Log.d("测试", "啥我也不干 空定时器" ); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imgchange = (ImageView) findViewById(R.id.imgchange); videoView = findViewById(R.id.videoView); start(); } /**选择播放图片还是播放视频*/ public void start() { task = new TimerTask() { @Override public void run() { if (imgstart < imgids.length) { Log.d(TAG, "length" +imgids.length ); Message msg = Message.obtain(); msg.what = 0; myHandler.sendEmptyMessage(flag); Log.d(TAG, "flag" +flag ); } else { if(flag == 2){ myHandler.sendEmptyMessage(flag); //啥也不干 }else { flag = 1; Log.d("测试", String.valueOf(flag)); myHandler.sendEmptyMessage(flag); //播放视频 } } } }; //定时器开始执行 timer.schedule(task,0,5000); } //播放视频 private void initData() { String uri = "android.resource://" + getPackageName() + "/" + R.raw.b; videoView.setVideoURI(Uri.parse(uri)); //开始播放 videoView.start(); //播放完成回调 videoView.setOnCompletionListener(new MyPlayerOnCompletionListener()); //防止出现视频播放错误的问题 videoView.setOnErrorListener(videoErrorListener); } //防出现无法播放此视频窗口 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为初始值*/ /**多个视频可以在这进行切换,进行一次判断加入还有视频就播放,没有就走下面这一段*/ imgstart = 0; flag = 0; imgchange.setVisibility(View.VISIBLE); videoView.setVisibility(View.GONE); } }}
更多相关文章
- Android(安卓)9.0实现系统内录(只录制系统声音)
- 滤镜开发(一) 开篇:关于滤镜
- Android之ListView原理学习与优化总结
- Android之增长的数字(仿支付宝资产数字)
- android游戏开发适应多屏幕的问题 .
- [置顶] android人脸识别——HowOld测测你的年龄和性别
- android 图片压缩,bitmap压缩总结
- Android(安卓)UI设计小知识——Nine-Patch图片
- Android学习笔记:获取相册和摄像机图片在APP显示Demo