300x250
반응형

추가 기능을 만들려고 하는데, Youtube나 네이버 동영상 등 여러가지 동영상 플랫폼에서 지원하는 기능이다.

맨처음에 기능의 이름을 몰라서 여러가지로 검색을 해보았는데 해당 기능의 이름은 PIP라고 부른다.

 

간단한 예제를 먼저 소개를 하고 추후에 기능을 추가할 예정이다.

 

구현 순서.

1. 설정 : 매니페스트 수정. ( AndroidManifest.xml )

<activity
  ......
  android:resizeableActivity="true"
  android:supportsPictureInPicture="true"
  ......
/activity>

매니페스트에 위 두개를 추가 한다.

 

2. xml 수정

기본생성된 내용을 수정한다.

<VideoView
        android:id="@+id/main_video_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <Button
            android:id="@+id/main_pip_btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Start PIP mode"
            android:backgroundTint="@android:color/holo_orange_light"
            />
    </ScrollView>

 

3. 코드 수정.

class MainActivity : AppCompatActivity() {
    private val mPipBuilder = PictureInPictureParams.Builder()
    private lateinit var binding : ActivityMainBinding
    private val TAG = "PIP"

    override fun onCreate(savedInstanceState: Bundle?) {
        Log.d(TAG, "[power cycle] onCreate")
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.mainVideoView.run {
            //영상이 끝나면 영상을 재시작해서 무한반복 시킴.
            setOnCompletionListener {
                it.start()
            }

            //res폴더에 있는 비디오를 비디오뷰에 set시켜준다.
            setVideoURI(Uri.parse("android.resource://$packageName/${R.raw.sample}"))
            start()
        }

        binding.mainPipBtn.setOnClickListener {
            mPipBuilder.setAspectRatio(Rational(binding.mainVideoView.width, binding.mainVideoView.height))
            enterPictureInPictureMode(mPipBuilder.build())
        }
    }
}

 

4. 결과 화면

START PIP MODE를 클릭하면 오른쪽 사진처럼 화면이 작아짐을 볼수있다.

 

추후에 화면이 작아졌을 경우 재생버튼등의 layout등을 표시하고 그에 따른 기능을 구현하는 예제를 추가로 만들어 볼 예정이다. 

728x90

+ Recent posts