自定义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);}@Overrideprotected 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界面
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;@Overrideprotected 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一起来跳支舞吧");}@Overrideprotected void onStart() {super.onStart();playVideo();}@Overrideprotected 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() {@Overridepublic 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;@Overridepublic 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();}}
end
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
