ドラッグ可能なフローティングウィンドウのビデオズーム

直接地図上に

    

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可能出现异常
        } 

    }

便利な言葉は議論に歓迎し、スターああを追加する手助け

 ポータル

 

 

おすすめ

転載: www.cnblogs.com/doubleyoujs/p/11495044.html