您的位置:首页 > 其它

qq7.0的视频动态图登录界面实现讲解解决videoview黑屏问题解决图片视频各种手机适配与缩放衔接问题

2017-07-10 22:34 1081 查看
首先要解决的是播放资源文件视频的问题,很多第三方都不支持,所以这里直接用系统videoView写比较好。本人找了相关assest读取播放的方法最后不得不放弃,支持Uri的就只有R.raw文件夹下的东西了。代码如下:视频的宽高适应不同手机不留缝隙问题。继承VideoVideo重新测量即可解决,这里有人说很简单 网上还到处抄,还说这不需要什么算法,那么简单的话  你来。
String VIDEO_PATH = "android.resource://" + BuildConfig.APPLICATION_ID + "/" + R.raw.login;
loginActivityBinding.videoView.setDisplayAspectRatio(MeasureUtil.ASPECT_RATIO_PAVED_PARENT);loginActivityBinding.videoView.setOnCorveHideListener(new SystemVideoView.OnCorveHideListener() {@Overridepublic void requestHide() {loginActivityBinding.corver.setVisibility(View.GONE);}});loginActivityBinding.videoView.setVideoURI(Uri.parse(Constants.VIDEO_PATH));loginActivityBinding.videoView.start();loginActivityBinding.videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {loginActivityBinding.videoView.seekTo(0);loginActivityBinding.videoView.start();}});//循环播放。
第二步:由于预加载时间的问题 需要解决 刚进入界面黑屏问题。解决方案就是弄一张图片和视频的大小一样大,布局缩放也是如此。第三步: 比较麻烦的坑因为在onPreListener实际上视频也是有黑屏的1秒不等 ,如果 设置封面1秒后显示会产生不连贯的视频了,所以必须找一个更好的方法。就是在预加载完毕拿到MediaPlayMnager之后给她设置一个infoListener的监听 就完美解决了。代码如下:
/*** Created by qssq on 2017/7/10 qssq666@foxmail.com*/public class SystemVideoView extends VideoView {private int videoWidth;//widthprivate int videoHeight;private int displayAspectRatio;public SystemVideoView(Context context) {super(context);}public SystemVideoView(Context context, AttributeSet attrs) {super(context, attrs);init(context);}public SystemVideoView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context);//        setVisibility(INVISIBLE);}protected void init(Context context) {this.videoHeight = context.getResources().getDisplayMetrics().heightPixels;this.videoWidth = context.getResources().getDisplayMetrics().widthPixels;super.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(final MediaPlayer mp) {//                setVisibility(VISIBLE);SystemVideoView.this.videoWidth = mp.getVideoWidth();SystemVideoView.this.videoHeight = mp.getVideoHeight();mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {@Overridepublic boolean onInfo(MediaPlayer mp, int what, int extra) {if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {if (onCorveHideListener != null) {onCorveHideListener.requestHide();}}if (onInfoListener != null) {onInfoListener.onInfo(mp, what, extra);}return false;}});}});}MediaPlayer.OnPreparedListener onPreparedListener = null;public interface OnCorveHideListener {void requestHide();}@Overridepublic void setOnInfoListener(MediaPlayer.OnInfoListener onInfoListener) {this.onInfoListener = onInfoListener;}MediaPlayer.OnInfoListener onInfoListener;public void setOnCorveHideListener(OnCorveHideListener onCorveHideListener) {this.onCorveHideListener = onCorveHideListener;}OnCorveHideListener onCorveHideListener;@Overridepublic void setOnPreparedListener(MediaPlayer.OnPreparedListener l) {this.onPreparedListener = l;}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);/* int width = MeasureSpec.getSize(widthMeasureSpec);int height = MeasureSpec.getSize(heightMeasureSpec);int currentHeight = Math.max(height, videoHeight);int currentWidth = currentHeight * 9 / 16;setMeasuredDimension(currentWidth, currentHeight);*/MeasureUtil.Size measure = MeasureUtil.measure(displayAspectRatio, widthMeasureSpec, heightMeasureSpec, videoWidth, videoHeight);setMeasuredDimension(measure.width, measure.height);}public void setDisplayAspectRatio(int var1) {displayAspectRatio = var1;this.requestLayout();}@Overridepublic boolean isPlaying() {return false;}public int getDisplayAspectRatio() {return displayAspectRatio;}public void setCorver(int resource) {BitmapFactory.Options opts = new BitmapFactory.Options();opts.inJustDecodeBounds = true;BitmapFactory.decodeResource(getResources(), resource, opts);}}
最后MeasureUtils是为了打击伸手党 喷子的,有人说说笨说一句代码就解决了,还说我特么新手啥读不懂,对于这样的安卓开发者,我不想多说什么,我也是弄了好几天解决的,个位想解决视频和图片的缩放比完美衔接就需要这个东西了,文件地址 csdn.图片的测量实际上和视频一样重新measure就行。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐