直接地図上に
3つのフローティングウィンドウを拡大縮小して、ビデオをドラッグすることができます
サスペンション・ウィンドウ
1.1、ウィンドウマネージャを作成します
//のparamsを作成し、位置制御のサイズ
mParamsの=のWindowManager.LayoutParams()
//フローティングウィンドウ mWindowManager = application.getSystemService(Context.WINDOW_SERVICE)ウィンドウマネージャAS
//許可要求 mParams.type = IF(Build.VERSION.SDK_INT> = ビルド。 VERSION_CODES.O){ WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY } 他{ WindowManager.LayoutParams.TYPE_SYSTEM_ALERT }
ウィンドウインターフェイスを作成するために1.2
ビューは、カスタム動画プレーヤーのコントロールを含み、コントロールとズームコントロールをオフにします
1.3ビューの追加
mParams.width = mSmallWidth mParams.height = mSmallHeight mParams.y = mHeight mWindowManager.addView(mVideoView、mParams)
このフローティングウィンドウのParam xを制御することにより、PARAMSの大きさを制御することによって制御幅、高さ、コントロールのY位置を生成します
第二に、ビデオプレーヤー
2.1 VideoVIewプレイ
直接ビデオ再生をコントロールVideoVIew
mVideoView.setVideoURI(パス)
mVideoView.start()
mVideoView.requestFocus()
mVideoView.setOnCompletionListener {
mVideoView.start()
}
ウリ主要なローカルファイルFileProvider、直接Uri.parse()することで、現在利用可能な買収は、ケースファイルが得られます見つけることができない非常に良いではありません
ヴァルURI = FileProvider.getUriForFile(この、 "com.js.floatingwindow.fileprovider"、ファイル(パス))
2.2 SurfaceViewプレイ
SurfaceView + MediaPlayerの再生、VideoViewがより複雑であるが、VideoVIewでこの方法を根本的に同じ
Player.setDisplay(ホルダー)の両方、音楽プレーヤーや他の小さな差によって相関させるために、表示画像上のMediaPlayer、SurfaceViewを使用して再生します
mPlayer.isLooping = 真 試み{ mPlayer.setDatSource(path.toString()) } キャッチ(E:例外){ } mPlayer.prepareAsync() mPlayer.setOnPreparedListener { mPlayer.start() }
2.3ズーム
ズームは、動画は、変更を追跡するために、2つが同じではない方法で、この変更を必要とする場合
VideoView比較的単純
viewTreeObserver.addOnGlobalLayoutListener {
mVideoView.run {
holder.setFixedSize(幅、高さ)
requestLayout()
}
}
SurfaceView
楽しいchangeVideoSize(){ しようと{ VAR幅:のInt = mPlayer.videoWidth VARの高さ:のInt = mPlayer.videoHeight ヴァルsurfaceWidth = のgetWidth() ヴァルsurfaceHeight = のgetHeight() ヴァル最大:フロート = Math.max(幅/ surfaceWidth.toFloat( )、高さ/ surfaceHeight.toFloat()) 幅 = Math.ceil((幅/ MAX).toDouble())。オーバーライド:() 高さ = Math.ceil((高さ/ 最大).toDouble())。オーバーライド:() ヴァルのparams =FrameLayout.LayoutParams(幅、高さ) params.gravity = Gravity.CENTER mVideoView.layoutParams = paramsは mVideoView.invalidate() } キャッチ(E:IllegalStateExceptionが){ // MPLAYER可能出现异常 } }
便利な言葉は議論に歓迎し、スターああを追加する手助け