刚入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);            }        }}

更多相关文章

  1. Android(安卓)9.0实现系统内录(只录制系统声音)
  2. 滤镜开发(一) 开篇:关于滤镜
  3. Android之ListView原理学习与优化总结
  4. Android之增长的数字(仿支付宝资产数字)
  5. android游戏开发适应多屏幕的问题 .
  6. [置顶] android人脸识别——HowOld测测你的年龄和性别
  7. android 图片压缩,bitmap压缩总结
  8. Android(安卓)UI设计小知识——Nine-Patch图片
  9. Android学习笔记:获取相册和摄像机图片在APP显示Demo

随机推荐

  1. Android访问权限大全
  2. android 温故知新之fragment中易忽视的on
  3. Android(安卓)API Levels
  4. LinearLayout && RelativeLayout 常用属
  5. 关于android:configChanges的属性
  6. Android(安卓)客户端发送邮件(JMail方式)
  7. android中的逐帧动画
  8. android多媒体播放源码解析
  9. android animation中的参数interpolator
  10. Unity3D在android下调试