Android 实现引导页视频播放效果

效果图:素材资源以QQ音乐分享代替,后续可以替换为自己需要的视频资源 

  • 自定义view集成VideoView
package com.ex.theme.view;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.VideoView;

/**
 * @author sd
 * @date 2019/4/1
 */
public class CustomView extends VideoView {

    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//        计算屏幕宽高
        int width = getDefaultSize(0, widthMeasureSpec);
        int heigth = getDefaultSize(0, heightMeasureSpec);
        setMeasuredDimension(width, heigth);
    }
}
  •  布局页面
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.ex.theme.view.CustomView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <Button
        android:id="@+id/tv_jump"
        android:text="跳过"
        android:layout_alignParentRight="true"
        android:background="@android:color/transparent"
        android:layout_margin="10dp"
        android:textSize="16sp"
        android:textColor="@color/color_green8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

     <Button
        android:id="@+id/bt_voice"
        android:text="@string/splash_bt_voice"
        android:drawableRight="@drawable/open_voice"
        android:visibility="gone"
        android:layout_alignParentRight="true"
        android:background="@android:color/transparent"
        android:layout_margin="15dp"
        android:textSize="16sp"
        android:textColor="@color/color_green5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


    <Button
        android:visibility="gone"
        android:id="@+id/bt_start"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="56dp"
        android:text="欢迎进入"/>

</RelativeLayout>
  • 编辑SplashActivity页代码
package com.ex.theme.activity;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;

import com.ex.theme.R;
import com.ex.theme.view.CustomView;

/**
 * @author sd
 * @date 2019/4/1    app启动 导航页
 */
public class SplashActivity extends Activity implements View.OnClickListener {

    private CustomView mVideoView;
    private Button mBtStart;
    private Button mTvJump;
    private int recLen = 15;                  //media             //视频的时间一般控制控制在5~6s
    private Thread mThread;
    private MediaPlayer mVoice;     //声音

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        initView();
        initData();
    }

    private void initView() {
        mTvJump = findViewById(R.id.tv_jump);                 //跳过
        mBtStart = findViewById(R.id.bt_start);              //欢迎按钮
        mBtStart.setAlpha(0.6f);                             //按钮的透明度
        mTvJump.setOnClickListener(this);
        mBtStart.setOnClickListener(this);
        mVideoView = findViewById(R.id.video_view);

        mThread = new Thread(new Runnable() {
             @Override
             public void run() {
                     while (true){
                         try {
                             Thread.sleep(1000);
                             Message message = new Message();
                             message.what =1;
                             mHandler.sendMessage(message);
                         } catch (Exception e) {
                             e.printStackTrace();
                         }
                     }
             }
         });
       mThread.start();
    }

    Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                case 1:
                    recLen--;
                if (recLen <=0){
                    mTvJump.setVisibility(View.GONE);
                    mHandler.removeCallbacks(mThread);          //移除
                }else {
                    mTvJump.setText("跳过 "+recLen);
                }
            }
            super.handleMessage(msg);
        }
    };

    private void initData() {
        // 加载视频资源
        mVideoView.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.all));
        //播放
        mVideoView.start();
        //循环播放
        mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                 mVoice = mp;                                    //控制声音的变量
                mBtStart.setVisibility(View.VISIBLE);                    //一轮视频结束后,显示欢迎进入按钮
                mVideoView.start();
            }
        });
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.bt_jump:                  //跳过
//                mVideoView.stopPlayback();                  //停止播放
                startActivity(new Intent(SplashActivity.this,MainActivity.class));
                finish();                        //退出
                break;
            case R.id.bt_voice:                 //声音按钮
                if (mBtVoice.getText().equals("关闭声音")){
                    mVoice.setVolume(0f,0f);            //关闭声音
                    mBtVoice.setText("打开声音");
                    mBtVoice.setCompoundDrawablesWithIntrinsicBounds(0,0,R.drawable.close_voice,0);
                }else if (mBtVoice.getText().equals("打开声音")){
                    mVoice.setVolume(1,1);              //打开声音 
                    mBtVoice.setText("关闭声音");
                    mBtVoice.setCompoundDrawablesWithIntrinsicBounds(0,0,R.drawable.open_voice,0);
                }
                break;
            case R.id.bt_start:                     //欢迎进入
                startActivity(new Intent(SplashActivity.this,MainActivity.class));
                finish();
                break;
            default:
                break;
        }
    }
}
  •  视频资源放在res文件raw下:

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android Studio引导实现可以通过以下步骤完成: 1. 创建一个新的Android Studio项目。 2. 在项目中创建一个新的Activity,用于显示引导。 3. 在引导Activity中添加一个ViewPager控件,用于显示多个面。 4. 创建一个PagerAdapter类,用于管理ViewPager中的面。 5. 在PagerAdapter中添加需要显示的面,可以使用布局文件或代码方式创建。 6. 在引导Activity中添加一个指示器控件,用于显示当前面的位置。 7. 在ViewPager的OnPageChangeListener中更新指示器的位置。 8. 在最后一个面中添加一个按钮,用于跳转到主界面或登录界面。 9. 在按钮的点击事件中跳转到相应的界面。 以上就是Android Studio引导实现的基本步骤,可以根据具体需求进行调整和扩展。 ### 回答2: 引导在移动应用中是一个非常重要的组件,它可以帮助用户更好地了解应用程序的功能和使用,提高用户的体验和满意度。Android Studio提供了良好的支持来实现应用程序的引导实现步骤如下: 1.创建一个新项目 在Android Studio中创建一个新项目。在创建项目的过程中,可以选择空白活动,在项目创建后再进行引导的添加。 2.设计引导 准备好需要展示的引导图片,并按照设计图的要求进行切图、编辑等操作。 3.创建视图控件 打开activity_main.xml文件,并添加ViewPager和CircleIndicator视图控件,用于展示引导和指示当前展示的引导的位置。ViewPager需要用Adapter进行管理,并创建好相应的Fragment或者View视图。 4.创建引导适配器 创建一个继承自PagerAdapter的适配器类,用于管理ViewPager中展示的引导视图控件。在适配器中需要重写getCount()方法,返回需要展示的引导数量;getItem()方法,返回某一个特定位置的引导视图控件;以及isViewFromObject()方法,用于判断某个视图控件是否为某一视图。 5.添加动画效果 在不同的引导之间需要添加相应的动画效果,以便让用户更加吸引和留意。可以使用Android中提供的Animator、ObjectAnimator等动画技术实现需要的动画效果。 6.完善引导功能 在ViewPager中添加事件监听器,以便在规定条件下实现面跳转和引导的最终目标。 7.测试 在完成代码编写后需要进行测试,并检查引导中的所有功能是否正常工作。以便在发布应用时达到最佳效果。 总之,通过上述步骤的操作,可以在Android Studio中很轻松地实现一个流畅、功能完备的引导。这将有助于提高用户体验和应用程序的使用率。 ### 回答3: 在开发Android应用时,经常需要添加引导来给用户介绍应用的基本功能和操作方法。本文将以Android Studio为例,介绍如何实现引导。 一、创建项目 首先打开Android Studio,点击“Start a new Android Studio project”,选择“Empty Activity”,输入“App name”和“Package name”,点击“Finish”创建项目。 二、添加引导 1、步骤一 在“app”文件夹下,右键点击“res”,选择“New”-“Android Resource File”,设置“Resource type”为“layout”,命名为“activity_main.xml”(这里取名为activity_main.xml是为了后面直接复制粘贴代码方便)。 2、步骤二 右键点击“res”文件夹,选择“New”-“Folder”-“Values Folder”,命名为“values-w820dp”(这个文件夹的作用是为了适配平板设备),在该文件夹下创建一个名为“dimens.xml”的布局文件,在该文件中添加以下代码: ``` <resources> <dimen name="tutorial_image_size">450dp</dimen> <dimen name="tutorial_image_padding">30dp</dimen> <dimen name="tutorial_title_size">20sp</dimen> <dimen name="tutorial_title_padding_top">30dp</dimen> <dimen name="tutorial_description_size">14sp</dimen> <dimen name="tutorial_description_padding_top">10dp</dimen> <dimen name="tutorial_button_padding_top">50dp</dimen> <dimen name="tutorial_button_size">50dp</dimen> </resources> ``` 3、步骤三 在“res”文件夹下创建一个名为“drawable”的文件夹,将要使用的引导图片拷贝到该文件夹下。 4、步骤四 在“res”文件夹下创建一个名为“values”的文件夹,在该文件夹下创建一个名为“colors.xml”的布局文件,在该文件中添加以下代码: ``` <resources> <color name="colorPrimary">#3F51B5</color> <color name="colorPrimaryDark">#303F9F</color> <color name="colorAccent">#FF4081</color> <color name="colorTutorialBackground">#FFFFFF</color> </resources> ``` 5、步骤五 在“res”文件夹下创建一个名为“drawable”的文件夹,在该文件夹下创建一个名为“gradient_tutorial_background.xml”的布局文件,在该文件中添加以下代码: ``` <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="@color/colorPrimary" android:endColor="@color/colorPrimaryDark" android:angle="135" /> </shape> ``` 6、步骤六 在“res”文件夹下创建一个名为“layout”的文件夹,在该文件夹下创建一个名为“item_viewpager_tutorial.xml”的布局文件,在该文件中添加以下代码: ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorTutorialBackground" android:orientation="vertical" android:padding="@dimen/tutorial_image_padding"> <ImageView android:id="@+id/imageViewPagerTutorial" android:layout_width="@dimen/tutorial_image_size" android:layout_height="@dimen/tutorial_image_size" android:layout_gravity="center_horizontal" android:layout_marginBottom="@dimen/tutorial_title_padding_top" android:src="@drawable/tutorial1" /> <TextView android:id="@+id/tvTitleViewPagerTutorial" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="@dimen/tutorial_title_padding_top" android:text="Title" android:textColor="#000000" android:textSize="@dimen/tutorial_title_size" /> <TextView android:id="@+id/tvDescriptionViewPagerTutorial" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="@dimen/tutorial_description_padding_top" android:text="Description" android:textColor="#000000" android:textSize="@dimen/tutorial_description_size" /> <Button android:id="@+id/btnSkipViewPagerTutorial" android:layout_width="@dimen/tutorial_button_size" android:layout_height="@dimen/tutorial_button_size" android:layout_gravity="right" android:background="@null" android:paddingTop="@dimen/tutorial_button_padding_top" android:text="Skip" android:textColor="#000000" /> </LinearLayout> ``` 7、步骤七 在“res”文件夹下创建一个名为“layout”的文件夹,在该文件夹下创建一个名为“activity_view_pager_tutorial.xml”的布局文件,在该文件中添加以下代码: ``` <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/gradient_tutorial_background"> <androidx.viewpager.widget.ViewPager android:id="@+id/viewPagerTutorial" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> ``` 三、编写代码 1、步骤一 打开“MainActivity.java”文件,添加以下代码: ``` public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); boolean isFirstTime = MyPreferences.isFirst(MainActivity.this); if (isFirstTime) { startActivity(new Intent(MainActivity.this, ViewPagerTutorialActivity.class)); finish(); } } } ``` 2、步骤二 创建一个名为“MyPreferences”的Java类,在该类中添加以下代码: ``` public class MyPreferences { private static final String FIRST = "first"; private static SharedPreferences getSharedPreferences(Context context) { return context.getSharedPreferences("MyPreferences", MODE_PRIVATE); } public static void setFirst(Context context, boolean value) { SharedPreferences.Editor editor = getSharedPreferences(context).edit(); editor.putBoolean(FIRST, value).apply(); } public static boolean isFirst(Context context) { return getSharedPreferences(context).getBoolean(FIRST, true); } } ``` 3、步骤三 创建一个名为“ViewPagerTutorialActivity”的Java类,在该类中添加以下代码: ``` public class ViewPagerTutorialActivity extends AppCompatActivity { int[] tutorialImages = {R.drawable.tutorial1, R.drawable.tutorial2, R.drawable.tutorial3}; String[] titles = {"Title 1", "Title 2", "Title 3"}; String[] descriptions = {"Description 1", "Description 2", "Description 3"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_pager_tutorial); ViewPager viewPager = findViewById(R.id.viewPagerTutorial); TutorialViewPagerAdapter adapter = new TutorialViewPagerAdapter(this, tutorialImages, titles, descriptions); viewPager.setAdapter(adapter); Button btnSkip = findViewById(R.id.btnSkipViewPagerTutorial); btnSkip.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { MyPreferences.setFirst(ViewPagerTutorialActivity.this, false); startActivity(new Intent(ViewPagerTutorialActivity.this, MainActivity.class)); finish(); } }); } } ``` 4、步骤四 创建一个名为“TutorialViewPagerAdapter”的Java类,在该类中添加以下代码: ``` public class TutorialViewPagerAdapter extends PagerAdapter { private Context context; private int[] images; private String[] titles; private String[] descriptions; private LayoutInflater layoutInflater; public TutorialViewPagerAdapter(Context context, int[] images, String[] titles, String[] descriptions) { this.context = context; this.images = images; this.titles = titles; this.descriptions = descriptions; layoutInflater = LayoutInflater.from(context); } @Override public int getCount() { return images.length; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { View view = layoutInflater.inflate(R.layout.item_viewpager_tutorial, container, false); ImageView imageView = view.findViewById(R.id.imageViewPagerTutorial); TextView tvTitle = view.findViewById(R.id.tvTitleViewPagerTutorial); TextView tvDescription = view.findViewById(R.id.tvDescriptionViewPagerTutorial); Button btnSkip = view.findViewById(R.id.btnSkipViewPagerTutorial); imageView.setImageResource(images[position]); tvTitle.setText(titles[position]); tvDescription.setText(descriptions[position]); if (position == getCount()-1) { btnSkip.setText("Finish"); } container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } ``` 至此,Android Studio引导实现就完成了。在运行项目时,第一次打开应用会显示引导,用户按下Skip按钮,或者直接滑到最后一,点击Finish按钮进入主界面。之后再打开应用,就不会再显示引导了,因为已经保存了用户的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值