本文实例为大家分享了Android自定义videoview仿抖音界面的具体代码,供大家参考,具体内容如下
1.效果图
和抖音的界面效果一模一样,而且可以自定义,需要什么页面,请自己定义
2.自定义videoview
package com.example.myapplication20; import android.content.Context; import android.util.AttributeSet; import android.widget.VideoView; /** * 作者:created by Jarchie * 时间:2020/12/7 15:05:57 * 邮箱:jarchie520@gmail.com * 说明:自定义宽高VideoView */ public class CusVideoView extends VideoView { public CusVideoView(Context context) { super(context); } public CusVideoView(Context context, AttributeSet attrs) { super(context, attrs); } public CusVideoView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = getDefaultSize(getWidth(), widthMeasureSpec); int height = getDefaultSize(getHeight(), heightMeasureSpec); setMeasuredDimension(width, height); } }
3.xml界面
<&#63;xml version="1.0" encoding="utf-8"&#63;>
4.drawable
5.主界面设置地址,注意,本demo使用的是本地的视频文件,文件存储再../res/raw文件夹里面,请自行获取
package com.example.myapplication20; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; /** * 作者:JArchie * 源码参考地址:https://github.com/JArchie/TiktokDemo */ public class MainActivity extends AppCompatActivity { CusVideoView mVideoView; private int[] videos = {R.raw.v1, R.raw.v2, R.raw.qi}; TextView mTitle; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mVideoView = findViewById(R.id.mVideoView); mTitle = findViewById(R.id.mTitle); String url = "android.resource://" + getPackageName() + "/" + videos[1]; Log.e("TAG", "video_onCreate: " + url); mVideoView.setVideoURI(Uri.parse(url)); mTitle.setText("@王燕\n一起来跳支舞吧"); } @Override protected void onStart() { super.onStart(); playVideo(); } @Override protected void onDestroy() { super.onDestroy(); releaseVideo(); } //播放 private void playVideo() { Log.e("TAG", "play_video"); // View itemView = mRecycler.getChildAt(0); final CusVideoView mVideoView = findViewById(R.id.mVideoView); final ImageView mPlay = findViewById(R.id.mPlay); final ImageView mThumb = findViewById(R.id.mThumb); final MediaPlayer[] mMediaPlayer = new MediaPlayer[1]; mVideoView.start(); mVideoView.setOnInfoListener(new MediaPlayer.OnInfoListener() { @Override public boolean onInfo(MediaPlayer mp, int what, int extra) { mMediaPlayer[0] = mp; mp.setLooping(true); mThumb.animate().alpha(0).setDuration(200).start(); return false; } }); //暂停控制 mPlay.setOnClickListener(new View.OnClickListener() { boolean isPlaying = true; @Override public void onClick(View v) { if (mVideoView.isPlaying()) { mPlay.animate().alpha(1f).start(); mVideoView.pause(); isPlaying = false; } else { mPlay.animate().alpha(0f).start(); mVideoView.start(); isPlaying = true; } } }); } //释放 private void releaseVideo() { Log.e("TAG", "releaseVideo_video"); // View itemView = mRecycler.getChildAt(index); final CusVideoView mVideoView = findViewById(R.id.mVideoView); final ImageView mThumb = findViewById(R.id.mThumb); final ImageView mPlay = findViewById(R.id.mPlay); mVideoView.stopPlayback(); mThumb.animate().alpha(1).start(); mPlay.animate().alpha(0f).start(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。