android studio实现视频图片轮播功能

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

本人用的android studio3.6版本。

res/layout的XML文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="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">

    <ImageView
        android:id="@+id/imgchange"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible"
        />

    <VideoView
        android:id="@+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);
    }
}

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Android Studio实现图片轮播可以通过以下步骤: 1. 导入图片资源:将需要轮播的图片添加到项目的资源文件夹中,通常是在`res`目录下的`drawable`文件夹中。 2. 创建布局文件:在`res/layout`目录下创建一个新的布局文件,例如`activity_main.xml`。在布局文件中添加一个`ImageView`用于显示轮播的图片。 3. 添加ViewPager:在布局文件中添加一个`ViewPager`控件,用于实现图片的轮播效果。可以使用`androidx.viewpager.widget.ViewPager`来引入ViewPager。 4. 创建适配器:创建一个适配器类,继承自`androidx.fragment.app.FragmentPagerAdapter`,用于管理ViewPager中的图片片段。 5. 创建图片片段:创建一个图片片段类,继承自`androidx.fragment.app.Fragment`,用于显示单张图片。 6. 实现适配器方法:在适配器类中实现必要的方法,例如`getCount()`返回图片数量,`getItem()`返回指定位置的图片片段。 7. 设置适配器:在Activity或Fragment中找到ViewPager控件,并设置适配器。 8. 设置轮播效果:可以使用定时器或者Handler来实现图片的自动切换效果。在Activity或Fragment中使用定时器或Handler来定时切换ViewPager的当前项。 9. 添加指示器(可选):如果需要显示图片轮播的指示器,可以在布局文件中添加一个指示器控件,例如`ViewPagerIndicator`。 10. 监听点击事件(可选):如果需要监听图片的点击事件,可以在图片片段中为ImageView设置点击监听器,并在监听器中处理点击事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值