android 视频和图片切换并进行自动轮播



刚入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方法,根据msgwhat的值判断是否执行后续操作
        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;记录)