Programming/Android
[Kotlin/Android] PIP 모드
생각하는로뎅
2021. 9. 7. 11:58
반응형
유튜브 또는 넷플릭스 동영상 재생 중에 홈 화면으로 나오면, 모서리에 축소되는 화면을 PIP 모드라고 한다.
1. API LEVEL
Android 8.0(API 수준 26)에서는 활동을 PIP 모드로 실행이 가능하다.
2. 주의사항
RAM이 부족한 기기에서는 PIP가 사용 중지될 수도 있다.
3. 구현 소스
1) build.gradle (app)
...
android {
...
buildFeatures {
viewBinding = true
dataBinding = true
}
defaultConfig {
...
// Android 8.0(API 수준 26)에서는 활동을 PIP 모드로 실행할 수 있습니다.
minSdk 26
...
}
...
}
2) layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout>
<androidx.constraintlayout.widget.ConstraintLayout xmlns: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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_pip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="PIP MODE 전환"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"></Button>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
3) manifests/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
...
<!-- PIP 지원 설정 : android:supportsPictureInPicture="true" -->
<activity
android:supportsPictureInPicture="true"
...
>
...
</activity>
...
</manifest>
4) MainActivity.kt
import android.app.PictureInPictureParams
import android.content.pm.PackageManager
import android.content.res.Configuration
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.example.pipmode.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
this.binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
this.binding.btnPip.setOnClickListener {
// PIP를 사용할 수 있는지 확인 (RAM이 부족한 기기에서는 PIP가 사용 중지될 수도 있음)
if (packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) {
var param = PictureInPictureParams.Builder().build()
// pip mode 진입
enterPictureInPictureMode(param)
}
}
}
/**
* PIP MODE 전환시 Callback
* @author 임성진
* @version 1.0.0
* @since 2021-09-07 오전 11:54
**/
override fun onPictureInPictureModeChanged(
isInPictureInPictureMode: Boolean,
newConfig: Configuration?
) {
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
if (isInPictureInPictureMode) {
// PIP 모드에서 전체 화면 UI(컨트롤 등)를 숨깁니다.
} else {
// 전체 화면 UI를 복원합니다.
}
}
}
반응형