Android自定义videoview仿抖音界面的示例分析
作者
这篇文章主要介绍Android自定义videoview仿抖音界面的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
Android是什么
Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。
具体内容如下
1.效果图
和抖音的界面效果一模一样,而且可以自定义,需要什么页面,请自己定义
2.自定义videoview
packagecom.example.myapplication20; importandroid.content.Context; importandroid.util.AttributeSet; importandroid.widget.VideoView; publicclassCusVideoViewextendsVideoView{ publicCusVideoView(Contextcontext){ super(context); } publicCusVideoView(Contextcontext,AttributeSetattrs){ super(context,attrs); } publicCusVideoView(Contextcontext,AttributeSetattrs,intdefStyleAttr){ super(context,attrs,defStyleAttr); } @Override protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){ super.onMeasure(widthMeasureSpec,heightMeasureSpec); intwidth=getDefaultSize(getWidth(),widthMeasureSpec); intheight=getDefaultSize(getHeight(),heightMeasureSpec); setMeasuredDimension(width,height); } }
3.xml界面
<?xmlversion="1.0"encoding="utf-8"?> <RelativeLayoutxmlns: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/mRootView" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/mThumb" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="false" android:focusable="false" android:scaleType="centerCrop" android:visibility="visible"/> <ImageView android:id="@+id/mPlay" android:layout_width="100dp" android:layout_height="100dp" android:layout_centerInParent="true" android:alpha="0" android:clickable="true" android:focusable="true" android:src="@drawable/play_arrow"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginLeft="10dp" android:layout_marginBottom="60dp" android:orientation="vertical"> <TextView android:id="@+id/mTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:lineSpacingExtra="5dp" android:textColor="@android:color/white" android:textSize="16sp" tools:text="测试测试数据哈哈哈哈\n家里几个垃圾了个两个垃圾"/> </LinearLayout> <com.example.myapplication20.CusVideoView android:id="@+id/mVideoView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="false" android:focusable="false"/> </RelativeLayout>
4.drawable
<vectorandroid:alpha="0.61"android:height="24dp" android:viewportHeight="24.0"android:viewportWidth="24.0" android:width="24dp"xmlns:android="http://schemas.android.com/apk/res/android"> <pathandroid:fillColor="#99ffffff"android:pathData="M8,5v14l11,-7z"/> </vector>
5.主界面设置地址,注意,本demo使用的是本地的视频文件,文件存储再../res/raw文件夹里面,请自行获取
packagecom.example.myapplication20; importandroidx.annotation.Nullable; importandroidx.appcompat.app.AppCompatActivity; importandroid.media.MediaPlayer; importandroid.net.Uri; importandroid.os.Bundle; importandroid.util.Log; importandroid.view.View; importandroid.widget.ImageView; importandroid.widget.TextView; importandroidx.annotation.Nullable; importandroidx.appcompat.app.AppCompatActivity; /** *作者:JArchie *源码参考地址:https://github.com/JArchie/TiktokDemo */ publicclassMainActivityextendsAppCompatActivity{ CusVideoViewmVideoView; privateint[]videos={R.raw.v1,R.raw.v2,R.raw.qi}; TextViewmTitle; @Override protectedvoidonCreate(@NullableBundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mVideoView=findViewById(R.id.mVideoView); mTitle=findViewById(R.id.mTitle); Stringurl="android.resource://"+getPackageName()+"/"+videos[1]; Log.e("TAG","video_onCreate:"+url); mVideoView.setVideoURI(Uri.parse(url)); mTitle.setText("@王燕\n一起来跳支舞吧"); } @Override protectedvoidonStart(){ super.onStart(); playVideo(); } @Override protectedvoidonDestroy(){ super.onDestroy(); releaseVideo(); } //播放 privatevoidplayVideo(){ Log.e("TAG","play_video"); //ViewitemView=mRecycler.getChildAt(0); finalCusVideoViewmVideoView=findViewById(R.id.mVideoView); finalImageViewmPlay=findViewById(R.id.mPlay); finalImageViewmThumb=findViewById(R.id.mThumb); finalMediaPlayer[]mMediaPlayer=newMediaPlayer[1]; mVideoView.start(); mVideoView.setOnInfoListener(newMediaPlayer.OnInfoListener(){ @Override publicbooleanonInfo(MediaPlayermp,intwhat,intextra){ mMediaPlayer[0]=mp; mp.setLooping(true); mThumb.animate().alpha(0).setDuration(200).start(); returnfalse; } }); //暂停控制 mPlay.setOnClickListener(newView.OnClickListener(){ booleanisPlaying=true; @Override publicvoidonClick(Viewv){ if(mVideoView.isPlaying()){ mPlay.animate().alpha(1f).start(); mVideoView.pause(); isPlaying=false; }else{ mPlay.animate().alpha(0f).start(); mVideoView.start(); isPlaying=true; } } }); } //释放 privatevoidreleaseVideo(){ Log.e("TAG","releaseVideo_video"); //ViewitemView=mRecycler.getChildAt(index); finalCusVideoViewmVideoView=findViewById(R.id.mVideoView); finalImageViewmThumb=findViewById(R.id.mThumb); finalImageViewmPlay=findViewById(R.id.mPlay); mVideoView.stopPlayback(); mThumb.animate().alpha(1).start(); mPlay.animate().alpha(0f).start(); } }
以上是“Android自定义videoview仿抖音界面的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!
目录
推荐阅读
-
怎么使用Android基准配置文件Baseline Profile方案提升启动速度
-
HTML5如何实现禁止android视频另存为
-
学java好还是学php好?
-
Android如何实现多点触控功能
-
android怎么实现多点触摸应用
-
Android怎么实现手势划定区域裁剪图片
-
android怎么实现简单的矩形裁剪框
-
Android单选多选按钮怎么使用
-
Android中如何利用oncreate获取控件高度或宽度
Android中如何利用oncreate获取控件高度或宽度本篇内容...
-
Android中怎么使用onSaveInstanceState()方法
Android中怎么使用onSaveInstanceState()方法...
0 条评论
本站已关闭游客评论,请登录或者注册后再评论吧~